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

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

Apache FOPを使ってみる~FOPの基本処理シーケンス

2009年08月06日作成 

「Apache FOPを使ってみる」第2回目です。第2回目は、Apache FOPの処理シーケンスを解説したいと思います。FOPは「Knuthの分割アルゴリズム」と呼ばれるTeXで用いられているアルゴリズムを中心になっています。今回はKnuth アルゴリズムの詳細にまでは触れることはできませんが、FOPの基本的な動きをご理解いただけるでしょう。
それでは早速! Let's FOP!

Apache FOPの処理シーケンスの概要をまとめます。ステップごとに簡単に解説していきます。

0.XML文書をXSLTでFO文書に変換する。

 このステップ自体は、FOPの機能ではありません。(ApacheのXalanを内部的に呼んでいるだけです)  通常の場合直接FO文書を記述するパターンは少なく、ソースデータとなるXML文書と変換するためのXSLTスタイルシートを指定します。この段階でまず、XMLとXSLTからFO文書を作成します。

1.FO文書を元にFOツリーを生成する。

 ステップ0で作成したFO文書(実際にはメモリ上ですが)を、FOツリーというFOPの内部形式のオブジェクトに変換します。XMLでいうところのDOMのようなものです。

FOに関してはXSL-FOを理解する ~XSL-FOのキホン~をご覧ください。

2.Knuth要素 の生成

Knuth要素の生成は、生成されたFOツリーのPageSequenceごとに実行される。FO文書内の文字列や画像などの要素は検証され、個別のKnuth要素に分解される。結果として生成されるのはKnuth要素の配列である。基本的に各要素はFOツリーの文字列(あるいは文字)や画像にマッピングされている。

Knuth要素、、、に関してはまた次回触れます

3.行分割の決定

生成されたKnuth要素の配列は、Knuthアルゴリズムによって行単位に分割されます。Knuthアルゴリズムの詳細は次回に譲りますが、TeX(テックスではありません。テフと呼びます)の仕組みを開発された方のアルゴリズムです。TeXエンジンはこのアルゴリズムが元になっているようです。

4.ページ分割の決定

生成された行は行単位で配列とされ、その配列を行分割をけっているのと同じにKnuthアルゴリズムによってページ単位に分割されます。

5.レイアウト

適切に分割されたKnuth要素を元に、各要素の精確な位置を決定し、それぞれをArea情報として生成すします。

6.レンダリング

生成されたArea情報に基づきレンダリングを行います。PDFや画面出力、印刷など、指定された出力形式に従ってレンダリングします。

これでようやくPDFへ出力ができました

次回はKnuth

今回はこの辺で。。。次回はKnuthについて解説したいと思います。

事業推進 事業企画担当 遊撃手 吉田晃伸



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

関連キーワード:Apache


関連キーワード:Apache FOP


関連キーワード:Knuth


関連キーワード:XSL-FO


関連キーワード:遊撃手




ページトップへ戻る