PDF文書のページをカウントして、フッターにページ番号を付けます。
本プログラムではテキスト透かしの機能を利用してフッターにページ番号を追加します。ページ番号の形式は、[ページ番号/総ページ数]とします。
PDF文書は簡単にページを追加(挿入)・削除ができます(「『PDF CookBook』(第1巻)第1章 1.1 ページ編集」を参照)。ページを追加・削除するとページ番号が変わってきます。
『PDF Tool API』 の透かしは削除できます(2.1.10 透かしの削除参照)ので、ページ番号が変ったとき、透かしを一旦削除して、ページ番号の付け直しをする使い方ができます。
package cookbook; import jp.co.antenna.ptl.*; public class TextWaterMarkPageNumFooter { // そのクラスのusageを表示する関数 public static void printUsage() { System.out.println("usage: java TextWaterMarkPageNumFooter in-pdf-file out-pdf-file"); } /** * @param args the command line arguments */ public static void main(String[] args) { if (args.length < 2) { printUsage(); // usageメッセージの表示 return; } ...【WaterMarkSetMargin.javaと同じ処理のため省略 ・PtlParamInputを用いてPtlPDFDocument docに入力PDFをロード ・PtlParamOutputを用いて出力PDF名を指定】... // 透かしの追加 appendPageNumFooter(doc); ...【EncryptWithUserPass.javaと同じ処理のため省略 ・PtlParamOutputを用いてPtlPDFDocument docの内容を出力 ・PtlException, Exception, Error を catchするエラー処理 ・finally文で"--完了--"と表示する処理】... } public static void appendPageNumFooter(PtlPDFDocument doc) throws PtlException, Exception, Error { try (PtlParamWaterMarkText waterMarkText = new PtlParamWaterMarkText()) { // 以下、フッターの書式についてデフォルトの設定をする // 透かしの名前の設定 waterMarkText.setName("pageNumFooter"); // 透かしのZオーダーの設定 ZORDER_FRONT = 1 waterMarkText.setZorder(PtlParamWaterMark.ZORDER.ZORDER_FRONT); // 透かしの不透明度の設定 waterMarkText.setOpacity(1.0f); // 透かしをタイリングして配置するかどうかの設定 // false : タイリングして配置しない waterMarkText.setTiling(false); // 透かしに指定するフォントの設定 try (PtlParamFont font = new PtlParamFont("Times New Roman", 18.0f, PtlParamFont.WEIGHT.WEIGHT_MEDIUM, false, true)) { waterMarkText.setFont(font); } // 透かしの文字に指定する色の設定 try (PtlColorDeviceRGB colorText = new PtlColorDeviceRGB(0.0f, 0.0f, 0.0f)) { waterMarkText.setTextColor(colorText); } // 透かしの文字の縁取りに指定する色の設定 try (PtlColorDeviceRGB colorOutline = new PtlColorDeviceRGB(0.0f, 0.0f, 0.0f)) { waterMarkText.setOutlineColor(colorOutline); } // 透かしのテキストを対角線上に配置する設定 // false : 対角線上に配置しない waterMarkText.setWriteDiagonal(false); // 透かしのテキストを任意の角度で配置する設定 waterMarkText.setTextAngle(0.0f); // フッターのデフォルト設定終わり // マージンを設定する waterMarkText.setMargin( 5.0f, 5.0f, 10.0f, 5.0f); // 透かしの配置の設定 ALIGN_BOTTOM : 中央下 waterMarkText.setAlign(PtlParamWaterMark.ALIGN.ALIGN_BOTTOM); // 透かしを入れるページの範囲の設定 PAGE_RANGE_ALL : ページ範囲指定 waterMarkText.setPageRange(PtlParamWaterMark.PAGE_RANGE.PAGE_RANGE_CUSTOM); int numPages = doc.getPageCount(); // 総ページ数の取得 System.out.println("ページ数:" + numPages); System.out.println("処理中…"); for (int i = 0; i < numPages; i++) { // 透かしを読み込んだページに配置するよう設定 waterMarkText.setCustomPageRange(Integer.toString(i)); // 透かしに指定する文字列の設定 waterMarkText.setString(Integer.toString(i+1) + "/ "+ numPages + "pages"); // 透かしを文書に設定する doc.appendWaterMark(waterMarkText); } } } }
TextWaterMarkPageNumFooter.java
出力されたPDF文書では、次図のようにページの下部にノンブルが挿入されています。