
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文書では、次図のようにページの下部にノンブルが挿入されています。
