ホーム  > X-plus >  XML & 開発

この記事を送る はてなブックマークに追加する
テキストリンクコードを取得する

XSL-FOを理解する ~必要最低限のFOを理解しよう~

2009年09月10日作成 

 前回は、XSL-FOの概略について説明し、XSL-FOによる自動組版の一番単純な例を紹介しました。今回は前回の例で使用したFOを中心に内容の解説を行います。

 なお、前回はXMLファイルをXSLスタイルシートでFOに変換する工程も紹介しましたが、今回はXSLスタイルシートの工程を省いてFOの解説をします。まずはFOを理解し、仕上がりFOをイメージしながらXSLスタイルシートを書けるようになることを目指します。

※今回の例では日本語を使っていますが、FOPで日本語を扱うには日本語フォントの設定が必要です。「FOPで日本語のフォントを使うには(別途公開準備中)」を参考にしてください。以下の例では、この設定が前提になっています。


必要最低限のFOは?

 何に対して必要最低限というかという問題もありますが、とりあえずFOPで日本語を含む文書をPDFスタイルで印刷するのに必要な要素という定義で行くとして、最上位要素 fo:root とページレイアウト設定を行う fo:layout-master-set 、 fo:simple-page-master 、 fo:regionbody 、およびコンテンツを指定する fo:page-sequence 、 fo:flow 、 fo:block が必要です。これをツリー状に表すと以下の通りです。

foで必要最低限の要素をツリーで表現

図 1 ツリー状

実際のFOは以下の通りです(第1回の記事「XSL-FOを理解する ~XSL-FOのキホン~」で使ったname.foを日本語表示ができるように少し変えました)。

fo-2.png
図 2 name002.fo (クリックでソースダウンロードできます)

これをFOPでPDFにするには、以下のコマンドを実行します(日本語を含んでいるので-cがつきます)。

C:¥fop-0.95-bin¥fop-0.95>fop -c conf/fop.xconf name002.fo result002.pdf

作成されるPDFです(日本語が表示されている以外前回と同じです)。

fo-1.JPG

要素別解説

 では、さっそく要素を一つずつ解説します。

<ルート要素>

fo:root要素

 XSL結果ツリーのトップに来るノードです。XSL-FO名前空間を指定しています。


<書式設定部分>

fo:layout-master-set要素

 fo 全体は大まかにいって書式設定部分(ページレイアウト定義部分)とコンテンツ部分(テキストデータ、文字修飾情報等)に分かれますが、書式設定部分の最上位には必ず fo:layout-master-set 要素が来ます。書式設定に関するFOはすべてこの要素の下位要素として出現するということです。この直下には、ページの幾何学的情報を指定しページを生成する要素(fo:simple-page-master)、さらにその下位にはページをいくつかの領域に分割する要素(fo:region-body 、 fo:region-after 、 fo:region-before 、 fo:region-start 、 fo:region-end)が指定できます。


fo:simple-page-master要素

 幾何学的情報を指定しページを生成する要素。用紙サイズ、余白を設定します。

 さらに、ここの配下で、ページはさらに細かい“領域”(regions)に分割されます。最低1つの region-body から、プラス4つの region-before 、 region-after 、 region-start 、 region-end まで分割できますが、一般的な用語ではそれぞれ、本文領域、ヘッダー、フッター、左サイドバー、右サイドバーに相当する領域です。それぞれのページ内の配置は以下の通りです。

fo-3.png
図 3 領域(region)

fo:region-body要素

 simple-page-master を構築するのに使われますが、単純な今の場合は空要素でOKです。詳しくは、さかのぼりますが上のfo:simpe-page-masterの説明を見てください。 fo:simpe-page-master の中央(”center”)にくる領域を指定します。

 

ちょっと一息:top-bottom? before-after?

region-Xで位置を表す言葉に”top,bottom,left,right”(上、下、左、右)ではなく、”before,after,start,end”(前、後、始、終)を使う理由として、筆記スタイルの変化(例えば、欧文では文字は右から左へ、行は上から下へ、ページは左から右へめくるのに対して、和文で縦書きの本の場合は文字は上から下へ、行は左から右へ、ページは右から左へめくる)にも対応できるようにするためです。上の図は、親要素となるfo:simple-page-master要素のwriting-mode属性がデフォルトの”lr-tb”(文字はlleft=左からrright=右へ、行はttop=上からb=bottom=下への指定)の場合の配置図ですが、逆に、そのような筆記スタイルと関係のないを指定する場合、例えば、ページの余白を設定するとき(まさに、今このfo:simple-page-masterでやっていますが)には”top,bottom,left,right”といった指定方法を使います。

 

ちょっと一息:省略記法-Shorthand

fo:simple-page-master要素でmargin=”2cm”と指定していますが、このmargin属性は省略記法を使った書き方で、実際に組版ソフトがこの属性を読みこんで処理するときには、「margin-top=”2cm” margin-bottom=”2cm” margin-left=”2cm” margin-right=”2cm”」と置き換えて解釈されます。省略記法が使える属性はmarginに限らず他にもあります。詳しくはXSL1.1 5.2. Shorthand Expansionや付録B.3. Prperty Table:PartⅡを参照して下さい。なお、この省略記法は、三段階の設定がある実装レベルが最も高い“完全(Complete)”の場合だけですので、組版ソフトによっては対応していない可能性があります。

 



<コンテンツ部分>

fo:page-sequence要素

 ページを記述するフローオブジェクトの親要素になる要素。master-reference属性で、書式設定部分で指定した書式を、fo:simple-page-masterのmaster-name属性でつけた名前で指定します。今の例では一つしかありませんが、“A4-Portrait”を指定しています。

fo:flow要素

 ページを記述するフローオブジェクト。フローを領域(=region)に割り当てるため、flow-name属性を指定します。この例では、空要素で作成したregion-bodyしかありませんので、flow-name=”xsl-region-body”と指定します。

fo:block要素

 この要素に実際に印刷対象となる文字データを配置します。段落、見出し、図、表題などを配置するにはたいていこの要素を使います。今回の例では、使用するフォントやサイズなど文字に関する指定を属性で行っています(font-size="23pt" font-style="normal" font-weight="bold" font-family="Mincho")。他にも、行ピッチ、文字ピッチ、配置(右揃え、中央など)などなどいろいろ指定できます。詳しくはXSL1.1の仕様書「6.5.2. fo:block」を参照してください。今後この連載でも頻繁に登場する要素の一つとなるでしょう。

まとめ

XSL-FOの規格では、要素が次のように用途別に分類されています。

◆ Declarations and Pagination and Layout Formatting Objects(宣言、ページネーション、レイアウト)
◆ Block-level Formatting Objects(ブロック)
◆ Inline-level Formatting Objects(インライン)
◆ Formatting Objects for Tables(表)
◆ Formatting Objects for Lists(リスト)
◆ Dynamic Effects: Link and Multi Formatting Objects(動的効果:リンク)
◆ Formatting Objects for Indexing(インデックス)
◆ Formatting Objects for Bookmarks(しおり)
◆ Out-of-Line Formatting Objects(行外)
◆ Other Formatting Objects(その他)

 今回はまとめとして、最初のDeclarations and Pagination and Layout Formatting Objectsに登場する要素を階層図で表したものを載せておきます。

 グレーがFOの名前、黄色が属性で、赤い点線は今回の例で使用した要素です。要素名の横にあるカッコの記号の意味は、「(無し)⇒1回出現」、「(+)⇒1回以上出現」、「(?)⇒0回or1回出現」、「(*)⇒0回or1回以上出現」です。

fo-4.png
図 4 宣言、ページネーション、レイアウトFO その1(クリックで拡大)
fo-5.png
図 5 宣言、ページネーション、レイアウトFO その2

 XSL全体では81種類の要素、272の属性がありますので、その中から目的に合わせて適切なものを選ぶ必要があります。次回はさらにいろいろなFOを調べたいと思います。ということで、先は長いですが頑張りましょう!

M.A



この記事と関連の高い記事

関連キーワード:XML


関連キーワード:XSL-FO




ページトップへ戻る