少し凝ったヘッダを使いたい
最近、日時業務を効率化させたいなと思って空いた時間にツールを作っているわけですが、業務の一つに蓄積した情報を元に PDF を作成する作業が存在します。まぁ、一覧を出力するようなものですね。Java で PDF 出力といえば何なのかなと調べてみたら、どうやら iText というものが有名だそうです。
そんなわけで、最近ちょくちょく iText を触っているわけですが、その中で一つ気になったことがあるのでエントリを起こします。
よくある書類の一例
業務で使うような書類って、ほとんどにヘッダやフッタがありませんか?左上には書類名、右上には最終更新日時、中央下はページ番号、とかとか。
┌────────────────────────┐ │○×仕様書 最終更新者:鎌田 │ │ 最終更新日:2008/12/18│ │ │ │ │
こんな感じで、書類の作成ってのにはヘッダやフッタがつきものです。こういう PDF を iText を使って出力させたいとします。
iText ではこういうヘッダやフッタを作るときには HeaderFooter というクラスを使います。
HeaderFooter を使うが・・・
実は、HeaderFooter には Phrase しか与えることができません。つまり、左上とか右上のどちらかは実現できても、両方を一緒に指定することはできないんですね。
さて困った。どうしよう、とよく見てみたら、Phrase を継承した Paragraph というクラスがいて、実はこいつには PdfPTable を add することができます!
PdfPTable を使う
PdfPTable が使えるのならこちらのもの。罫線描画のないカラムが2つある表を作り、1つめを左寄せで、2つめを右寄せで作ってしまえば実現できます。
コード例としては下記の通り。
PdfPTable table = new PdfPTable(2); table.setWidthPercentage(100.0f); table.getDefaultCell().setBorder(Rectangle.NO_BORDER); table.addCell(new Phrase("header-1")); PdfPCell cell = new PdfPCell(table.getDefaultCell()); cell.setHorizontalAlignment(Element.ALIGN_RIGHT); cell.setPhrase(new Phrase("header-2")); table.addCell(cell); Paragraph paragraph = new Paragraph(); paragraph.add(table); HeaderFooter header = new HeaderFooter(paragraph, false); header.setBorder(Rectangle.NO_BORDER); Document document = new Document(); document.setHeader(header);
こんな感じでできますよ!