XSLTからPDFのページ数を取得する.

5月頃からXSL-FO、そして7月からXSLTの質問がStackOverflowにポストされたらダイジェストのメールが来るようにしました.XSL-FOの方はまだまばらですが、XSLTの量はすさまじいものがあります.7月1日から30日で324通のポストがありました.とても全部なんて見ていられません.XSLTは健在ですね.(この間日本のStackOverflowではたった1通のみです)

ちなみに質問の中に「XSLTから外部のPDFのページ数を知りたい!」というものがありました.実はこれはもう5年ほど前にJavaで外部関数をつくって実現していました.何故このような要望が出るかというと、特に表紙を作る場合、背幅を知るのにどうしてもいるのです.図で示すとこんな具合です.表紙/裏表紙を例えばA4で作っていると、背幅の分だけ幅を取ったPDFが必要になります.

イメージ 1


この背幅の計算は、コンテンツのPDFのページ数×紙の厚さで求めることができます.そうすれば、自動的に表紙のPDFを作れてしまうという具合なのです.

ちなみに、回答を書いたのですが、これにはPDFBoxというApacheのライブラリを使います.

How to return the (total) pagecount of external PDF files via XSL

私が作ったのはもう古くてPDFBoxが1.7の頃のバージョンでした.今回PDFBoxのJavaDocを見て「それなりに」コードを直したのですがポストしたらすぐ「お前のコードは古くて冗長だ!」とコメントがつきました.必死にもう一度最新のPDFBoxのJavaDocを見直して、アドバイス通りにコードを直すことができました.イヤApacheのPDFBoxもどんどん変わっているのですね.

ちなににこのコードをSaxonで実行するときには、Saxonの.jarの他に、commons-logging-1.2.jar、pdfbox-2.0.2.jarをCLASSPATHに入れておきます.

それにしても、世界の舞台はやはり厳しいです.ちょっとタコなコードを書くとすぐ手厳しい批判が来ます.でもとても勉強になります.また、この方法はXSLTスタイルシートから直接Javaライブラリを呼び出してページ数を得られるので、他の方法より簡単です.参考にしていただければ幸いです.