Apache FOP にさわる3

作成 2002/12/6

FOの書式入門

FOのサンプルは、とりあえずApache FOPのdocs/examples/にあります。 ただ、それも既に難しい(複雑)と思えた私は、 まず削って削って、そこから増やしていくことにしました。

最もシンプルな?FO

必須以外の要素をけづってみた超シンプルFOがコレです。

<?xml version="1.0"?>

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">

  <fo:layout-master-set>
    <fo:simple-page-master master-name="simple">
      <fo:region-body/>
    </fo:simple-page-master>
  </fo:layout-master-set>

  <fo:page-sequence master-reference="simple">
    <fo:flow flow-name="xsl-region-body">
      <fo:block>Hello FOP</fo:block>
    </fo:flow>
  </fo:page-sequence>

</fo:root>

ルート要素はroot

名前空間は任意ですが、普通 foにします。

ルート要素の子要素は、単一の<layout-master-set>と1個以上の<page-sequence>

layout-master-setはレイアウトのテンプレートで、 page-sequenceの中に各表示要素を書いていきます。

(停止中)

改行、折り返し問題

  1. 日本語の長い文字列(全角空白含む)がblockの幅を超えて、延々と続くことがあります。
  2. 半角文字(連続)の長い文字列がblockの幅を超えて、延々と続くことがあります。
  3. 改行文字をそのまま改行させたいんですけど。。。

1に対しては、 <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" language="ja"> を指定することで解決できます。 日本語文字は1文字ごとに改行チェックされます。

2については、難しいようですが、XSLTで対処できます。

3については、 linefeed-treatment で指定するのが正しいやり方だと思われますが、 FOP-0.20.4は対応していない?ようで。 これもとりあえずXSLTで対処できます↓

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3077&forum=9&6

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1865&forum=9

http://www.antenna.co.jp/XML/axf23/AXF23QA_TEC.htm#IDAMBYS


TOP