第19章 しおりのFO

PDFを配布するときはPDFのしおりを設定すると、アウトラインからPDFの内容にジャンプできて便利である。fo:bookmark-treeはしおりツリーを表現するFOである。XSL-FOプロセサはfo:bookmark-treeがあれば、その木構造からPDFのしおりを作成する。

fo:bookmark-treeはfo:rootの子供とする。順番はfo:layout-master-set、オプションのfo:declarationsの次、fo:bookmark-treeの順である。

fo:bookmark-treeの子供のfo:bookmarkが第1階層のしおり項目である。fo:bookmarkの子供としてfo:bookmark-titleを置き、しおりの項目に表示する文字列をその内容とする。fo:bookmark-titleは必須である。

fo:bookmarkのプロパティinternal-destinationプロパティでPDFの内部の行先を指定する。

表19・1 internal-destinationプロパティ
プロパティ値説明
空文字列(初期値)行先なし
<idref>PDF内部にある行先のIDを指定する。

fo:bookmarkのプロパティexternal-destinationプロパティでPDFの外部へのリンクを指定する。

表19・2 external-destinationプロパティ
プロパティ値説明
空文字列(初期値)行先なし
<uri-specification>行先の外部URIを指定する。

starting-stateプロパティで指定したしおり項目のサブツリーの初期状態を指定する。

表19・3 starting-stateプロパティ
プロパティ値説明
show(初期値)この項目のサブツリーがあれば開いた状態にする。
hideこの項目のサブツリーは閉じた状態にする。

しおりを階層化するときはfo:bookmarkの子供にfo:bookmarkを置く。これを繰り返してしおりのツリーを構築する。

次は、2階層のしおりを作成した例である。目次と第2章のフォントをボールドに設定、また第2階層の初期状態を閉じる設定とする。

<fo:root>
  <fo:layout-master-set>
    …略…
  </fo:layout-master-set>
  <fo:bookmark-tree>
    <fo:bookmark internal-destination="MARK001">
      <fo:bookmark-title font-weight="bold">
    目次</fo:bookmark-title>
    </fo:bookmark> 
    <fo:bookmark internal-destination="MARK002" 
                 starting-state="hide">
      <fo:bookmark-title>第1章</fo:bookmark-title>
      <fo:bookmark internal-destination="MARK003">
        <fo:bookmark-title>1.1</fo:bookmark-title>
      </fo:bookmark>
      <fo:bookmark internal-destination="MARK004">
        <fo:bookmark-title>1.2</fo:bookmark-title>
      </fo:bookmark>
      <fo:bookmark internal-destination="MARK005">
        <fo:bookmark-title>1.3</fo:bookmark-title>
      </fo:bookmark>
    </fo:bookmark>
    <fo:bookmark internal-destination="MARK006"
                 starting-state="hide">
      <fo:bookmark-title font-weight="bold">
    第2章</fo:bookmark-title>
      <fo:bookmark internal-destination="MARK007">
        <fo:bookmark-title>2.1</fo:bookmark-title>
      </fo:bookmark>
      <fo:bookmark internal-destination="MARK008">
        <fo:bookmark-title>2.2</fo:bookmark-title>
      </fo:bookmark>   
    </fo:bookmark>
    <fo:bookmark internal-destination="MARK010" 
                 starting-state="hide">
      <fo:bookmark-title>付録</fo:bookmark-title>
      <fo:bookmark internal-destination="MARK011">
        <fo:bookmark-title>付録A</fo:bookmark-title>
      </fo:bookmark>
      <fo:bookmark internal-destination="MARK012">
        <fo:bookmark-title>付録B</fo:bookmark-title>
      </fo:bookmark>
    </fo:bookmark>
    <fo:bookmark 
         external-destination="http://www.antenna.co.jp/">
      <fo:bookmark-title>
    http://www.antenna.co.jp/</fo:bookmark-title>
    </fo:bookmark>
  </fo:bookmark-tree>
  <fo:page-sequence>
    …略…
</fo:root>

組版結果をPDFとして保存する。PDF Readerで開くと次のようなしおりができている。左がPDFを開いた(初期)状態で、右はしおりの第2階層まで開いた状態である。

images/bookmark.png images/bookmark-open.png

図19・1 PDFのしおり