PDFが出来るまで
昨日は「BoostBookの書式が間違っていた」としか書きませんでしたが、その舞台裏をご紹介。
2/21バージョンでpdfを作成すると、いろいろ警告が出た後、
[ERROR] null
という究極に無意味なエラーメッセージを吐いて失敗します。(このエラーはFOP公式サイトのFAQにも載ってます)
FOPのバージョンを上げれば、多少マシになるかと思い最新のbeta版を試すと、どうもFOの書式が間違っているらしいことが分かりました。FOの書式を調べるのは骨が折れそうです。
BoostBookからPDFへの変換は、
という3段階で行われます。doc/bin/msvc/debugを覗けば中間ファイルが見つかります。FOの生成時点で問題があるわけなので、PDFを生成できる最小限のDocBookを書いてみました。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> <book> <chapter> <para>a</para> </chapter> </book>
bookだけの状態から始めて、パラグラフに1文字追加した時点で動きました。
これをBoostBookから生成したDocBookを比較してみます。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> <book><title>Hamigaki C++ ライブラリ</title><section><title>ライブラリ一覧</title><itemizedlist spacing="compact"><listitem><simpara><link linkend="audio">Audio</link> -
おっと、bookの子要素にsectionがあります。これが原因のようです。sectionの替わりにchapterが来るようにXMLを調整すると、無事PDFが出来上がりました。
はじめからDTDの妥当性をチェックすればよかったですね。今、xmllintしてみたらまだ問題はあるみたいですが。