2008-06-15 17:26:27
XML文書を変換してpdfを作ってくれるxsl-foとかいう仕組みがあるらしい。これは面白い。TeX以外の手段も確保しておきたいということで、早速試してみた。まずApacheのFOPのサイトからbinary版をダウンロードしてきて、適当なところにおいて、fopのシンボリックリンクを/usr/local/binにでも張るだけである。これでubuntuでもMacOSXでも動いた。問題は日本語である。
今のところ使える日本語フォントはTTFだけらしい。ちょっと困るのだが、そういうことなのだから私にはどうにもできない。最初にfont metricsとやらを作成した。フォントはMacで使っていた平成明朝を使用した。ubuntuではホームディレクトリ下の.fontsフォルダに入っている。MacOSXではホームディレクトリ下のLibrary/Fonts/に入っている。fop-0.94の中(下)にfontsというディレクトリ(フォルダ)を作って、そこにmetricsを作らせるために、
java -cp build/fop.jar:lib/commons-logging-1.0.4.jar:lib/commons-io-1.3.1.jar\\ org.apache.fop.fonts.apps.TTFReader /home/username/.fonts/HeiseiMincho-W3.ttf\\ fonts/heisei-mincho.xmlとやると、
Parsing font... Reading /home/username/.fonts/HeiseiMincho-W3.ttf... Font Family: HeiseiMincho Creating xml font file... Creating CID encoded metrics... Writing xml font file fonts/heisei-mincho.xml... This font contains no embedding license restrictions.という表示がでて、メトリクスとやらができあがる。
次にconfフォルダにあるfop.xconfをconfig.xmlという名前でコピーして保存した。フォントとして以下のように登録。
<font metrics-url="/home/username/Applications/fop-0.94/fonts/heisei-mincho.xml"\\ kerning="yes" embed-url="/home/username/.fonts/HeiseiMincho-W3.ttf"> <font-triplet name="heisei-mincho" style="normal" weight="normal"/> </font>ここではfop-0.94はホームディレクトリ下のApplicationsというフォルダに置いている。そして、test.foというファイルを作って、
fop -c /home/username/Applications/fop-0.94/conf/config.xml test.fo -pdf test.pdfとやるとtest.pdfファイルができあがるという寸法である。面倒臭い指示だが、ちゃんとできたのだ。絶対パスで書かないともっと面倒なことになるらしい。とにかくpdfファイルはできるのだ。素晴らしいではないか。問題は縦書きである。私は日本語は縦書きにしなければ気が済まないのである。そこで、次のような試験用ファイルを作った。
<?xml version="1.0" encoding="UTF-8" ?> <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" > <fo:layout-master-set> <fo:simple-page-master master-name="PageMaster"> <fo:region-body margin-top="3cm" writing-mode="tb-rl"\\ display-align="center" /> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference="PageMaster"> <fo:flow flow-name="xsl-region-body"> <fo:block font-family="heisei-mincho" font-size="18pt"\\ text-align="center" background-color="aqua"> 日本語の縦書き文書を作成。 </fo:block> </fo:flow> </fo:page-sequence> </fo:root>writing-mode="tb-rl"というとことが、上から下へ、右から左へという文字の流れを指定するはずである。ところが、下の画像のような文字列になってしまうのだ。フォント、大きさ、背景色、配置、そして文字の流れもちゃんと指定通りなのだが、ただ文字が横を向いてしまう。なぜ? なぜなんだ!