2011年4月5日火曜日

XPDFJ(PerlのPDF生成モジュール)における自動改ページ

perlを使ってプログラムからPDFを生成するような場合、HTMLに似た書式を使って簡単にレイアウトができるXPDFJという大変便利なモジュールがあります。

作者の中島靖さんのページ(モジュールのソース、解説書等があります)
XPDFJのドキュメント
XPDFJ標準マクロ概説(PDF)

私も仕事でよく使っているのですが、最近ページの内容があふれて自動で改ページする時の挙動が、使用するタグによって異なることに気づいたので、メモとして残しておきます。


まずは、次にあげる3つの条件の場合の元XMLと生成したPDFをダウンロードしてみてください。

1) 内容を<P>タグで囲っている場合
元のXML
生成したPDF

2) 内容を<DIV>タグで囲っている場合(<DIV>内に直接テキストは書けないので<P>も使っています)
元のXML
生成したPDF

3) 内容を<TABLE>タグで囲っている場合
元のXML
生成したPDF

生成したPDFを見てみると、1)と2)の場合には、文字が入り切らなくなった行で改ページされ、続きがそのまま2ページ目に続きますが、3)の場合には、文字が入り切らなくなった行を含んでいる<TR>全体が次のページに移り、前のページの終わりにその分の余白ができます。

したがって、コンテンツに枠線を付けようとする時、<DIV>タグか<TABLE>タグの選択肢がありますが、どのように改ページさせたいかによって、使い分ける必要がありそうです(<DIV>タグの場合は、枠線が2ページにまたがるが、<TABLE>タグの場合はまたがらない)。

今回の仕事では、最初3)の方法で記述していて出力結果が求めているものと違ったので、2)の方法に変更しました。

ちなみに、3)のやり方で、1つの<TR>内に含まれる内容が、1ページの容量よりも多くなってしまった場合、このテーブルを含むページが丸々PDFから抜け落ちてしまうので注意が必要です。

また、上述のXPDFJ標準マクロ概説を見ると、表組みを使う場合、表内部では改ページをさせない、とか、この行の後では改ページさせない、などの設定も可能なようです。

ちょっとマニアックな内容になってしまいましたが、XPDFJについては、これからもよく使うと思うので、また何か気づいたらメモしていきます。

関連記事


ブログランキングに参加しています。
最後に応援クリックしていただけると、とても嬉しいです!

0 件のコメント: