JGGUG の もくもくGroovy に参加したときの成果のまとめ。
HTMLからFO を生成して、FOP経由してPDFを作成するところまでやってみた。
以前の関連エントリ
Ubuntu 11.04 では apt-get でインストール可能。
$ sudo apt-get install xsltproc
$ sudo apt-get install fop
{link:http://www.ibm.com/developerworks/jp/xml/library/x-xslfo2app/} にHTMLからFOを生成してPDFにする説明があるのでこの記事を参考にしてみる。
そのページから入手できるサンプル x-xslfo2app-samples.zip を展開して...以下の内容の makefile を実行する.
result.pdf : tmp.fo
groovy topdf.groovy $< $@
tmp.fo :
xsltproc xhtml-to-xslfo.xsl everything.html > $@
topdf.groovyは後述
Apache FOP を使用して fo を PDF に変換します。(Apache FOPで配布されている exampleコードを Groovy に直したもの)
gist. 1170468
Caught: javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: For "fo:simple-page-master", "fo:region-body" must be declared before "fo:region-before"!
と言われるので、手作業で fo:simple-page-master, fo:region-body を fo:region-before の前に移動する 以下のように...
<fo:region-body margin-top="50pt" margin-bottom="50pt"/>
<fo:region-before region-name="rb-left" extent="25pt"/>
<fo:region-after region-name="ra-left" extent="25pt"/>
これで groovy topdf.groovy tmp.fo result.pdf が通るようになります。
https://gist.github.com/1170543 から xsl.patch を入手して、xhtml-to-xslfo.xsl のあるディレクトリ内でpatchを当てます。
$ patch < xsl.patch
<html>
<body>
<h1>Hello World!</h1>
<p>This is a convert test from html to pdf.</p>
<p>これは変換テストです。HTMLをPDFに変換します。</p>
</body>
</html>
結果

日本語はフォントの設定をしないと通らないようです。
たぶん、この方の記事を読めばわかるはず... {link:http://d.hatena.ne.jp/harvester/20091006/p1}