PDF間のリンク

Yahooのdita-usersにShingoさんという方から「異なるpublicationの間のリンクをどう実現するか?」するかという投稿が載っています.
 

ShingoさんはUsers guideとTechnical guideの2つを作っていて、Users guideからTechnical guideへリンクを張りたいとしています.もちろんこの場合Users guideとTechnical guideは異なるditamapから生成されます.
 
一般的にDITAは1つのpublicationを作るとき、そのpublicationの内部のリンクだったら実に簡単に作ることができます.おなじみのreltableを駆使してtopicのrelated-linksにtopic相互間のリンク情報を生成し、そこからPDF内部のリンクを作成します.
 
ところがpublicationが異なる場合、PDFだったら生成済みのPDFに対してリンクを張らねばなりません.これを実現するには、reltableに
 
<topicref href="TechnicalGuide.pdf" scope="external" linking="targetonly/>
 
などと記述しなければならないでしょう.残念ながらTechnical guideのditamapへリンクを記述しても意味がないのです.
 
さてこのように記述すると生成されたリンクをクリックすればTechnicalGuide.pdfが開かれることになります.
しかしTechnicalGuide.pdfの特定の箇所を開くにはどうすれば良いのでしょうか?
この場合2つの準備が必要になります.
 
1.TechnicalGuide.pdfを作るとき、ターゲットとなるtopicに対してidとそれに対応するNamed Destinationと呼ばれるPDFの情報を生成してやります.
 
2.XSL-FOでは、Formatterの場合
 
<fo:block id="[topicのid]" axf:destination-type="xyz-top">
 
などとすることによりPDF中にこの情報が生成されます.
 
3.Users guideの方では、リンク先PDFのファイル名と上記のtopicのidが必要になります.FOではFormatterの場合
 
<fo:basic-link external-destination="TechnicalGuide.pdf#nameddest=[topicのid]" axf:action-type="gotor">
 
と指定してやればよいでしょう.こうすることにより生成されたリンクをクリックすれば、TechnicalGuide.pdfの該当トピックにジャンプすることができます.
 
さてここまではやれば何とかできる範疇です.でもこのdita-usersのShingoさんの投稿は
 
 For more detail, see "XXXX" on page NN in Technical guide.
 
とTechnical guideのページ番号を出したいということが特徴です.
 
でもこれ普通の方法では実現できません.なぜかというとDITAのレベルでもXSL-FOのレベルでも、あるtopicがPDF中の何ページ目に配置されるかは、実際にフォーマットしてPDFを生成しない限りわからないのです.これをDITA⇒XSL-FOのスタイルシートレベルでどうするかを考えてみました.これは次回に書きたいと思います.
 
※ axfのネームスペースの属性はAntenna House Formatterの独自拡張です.詳細は以下をご覧ください.