iTextを使ってPDF作成 - ページ番号 - [プログラミング]
(PDFファイルを作成するためのJava用ライブラリ)「iText」を使ってPDFを作っているわけなのですが、ページ番号を出力してくれる機能が無い。
そこで、自分でページ番号を出力することにします。
PdfWriter#setPageEvent()
にPdfPageEvent
インターフェースを持つクラスのオブジェクトを渡しておけば、ページ切り替え時にPdfPageEvent#onEndPage()
を呼び出してくれるので、そこでページの隅っこに座標を指定してページ番号を出力します。
import java.io.*; import com.lowagie.text.*; import com.lowagie.text.pdf.*; public class Sample { // ページ番号のフォントサイズ static private final int PAGE_FONT_SIZE = 10; // 本文とページの隙間 static private final int BETWEEN_TEXT_AND_PAGE = 20; static public void main(String[] args) { BufferedReader in = null; final Document doc = new Document(); try { final PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream("sample.pdf")); doc.open(); // 本文のフォント final Font font = new Font(BaseFont.createFont("HeiseiKakuGo-W5", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED)); // ページ番号のフォント final BaseFont page_font = BaseFont.createFont("HeiseiKakuGo-W5", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED); // ----- ここらへんから、ページ番号出力のための仕組み writer.setPageEvent(new PdfPageEventHelper() { // 次のページに切り替わる直前に呼び出される。 public void onEndPage(PdfWriter writer, Document document) { final PdfContentByte cb = writer.getDirectContent(); cb.saveState(); cb.beginText(); cb.setFontAndSize(page_font, PAGE_FONT_SIZE); // ページ番号の表示内容 final String page_text = writer.getPageNumber() + " "; // 右詰の時、少しずれるので末尾に空白を1つ追加しておく。 // ページ番号のY座標 final float y = document.bottom(-BETWEEN_TEXT_AND_PAGE); // ページの上側に出すなら // document.top(-BETWEEN_TEXT_AND_PAGE); // 中央に表示 cb.showTextAligned(PdfContentByte.ALIGN_CENTER, page_text, (document.right() + document.left())/2, y, 0); /* 左詰の場合 cb.showTextAligned(PdfContentByte.ALIGN_LEFT, page_text, document.left(), y, 0); */ /* 右詰の場合 cb.showTextAligned(PdfContentByte.ALIGN_RIGHT, page_text, document.right(), y, 0); */ cb.endText(); cb.restoreState(); } }); // ----- ここらへんまで、ページ番号出力のための仕組み in = new BufferedReader(new FileReader("sample.txt")); String line; while ((line = txt.readLine()) != null) { doc.add(new Paragraph(line, font)); } } catch (IOException e) { e.printStackTrace(); } catch (DocumentException e) { e.printStackTrace(); } finally { try { if (in != null) in.close(); } catch (IOException e) { } } doc.close(); } }
今日の一冊 | |
|
2007-07-07 21:33
nice!(0)
コメント(0)
トラックバック(0)
コメント 0