Java で Pdf オブジェクトモデルを操作する方法

Java で Pdf オブジェクトモデルを操作する方法

ドキュメント カタログにアクセスする

PDF カタログは文書のオブジェクトツリーのルートであり、PdfDictionary として表されます。Document.getCatalog() を使用してアクセスし、文書レベルのプロパティを検査または変更します:

try (Document doc = new Document("input.pdf")) {
    PdfDictionary catalog = doc.getCatalog();
    // Inspect catalog entries
}

PdfDictionary を扱う

PdfDictionary はこの低レベル PDF オブジェクトモデルにおける基本的なキーとバリューのコンテナです。PdfName.of() を使用して名前キーを作成し、任意の Pdf オブジェクト型の値を格納します:

PdfDictionary dict = new PdfDictionary();
dict.set(PdfName.of("Title"), new PdfString("My Document"));
PdfString title = (PdfString) dict.get(PdfName.of("Title"));
System.out.println(title.getString());

PdfArray を扱う

PdfArray はこのオブジェクトモデルにおける順序付けられたシーケンス型です。要素はゼロベースのインデックスで、任意の Pdf オブジェクト型を混在させて保持できます。値を取得し、適切な型にキャストします:

PdfArray array = new PdfArray();
array.add(PdfInteger.valueOf(100));
array.add(PdfInteger.valueOf(200));
array.add(PdfInteger.valueOf(300));
System.out.println("Array length: " + array.size());
int first = ((PdfInteger) array.get(0)).intValue(); // 100

トレーラ辞書にアクセスする

PDF トレーラ辞書には、クロスリファレンステーブルの位置と、ドキュメントカタログ (/Root) およびドキュメント情報辞書 (/Info) への参照が含まれます:

try (Document doc = new Document("input.pdf")) {
    PdfDictionary trailer = doc.getTrailer();
    // Trailer contains /Root, /Info, /Encrypt entries
}

名前付き番号ツリー

PDF 仕様の基礎となるオブジェクトモデル(ISO 32000-1 が COS レイヤーと呼んでいるもの)は、構造要素の親ツリーなどの番号ツリーに使用される PDF 名称ツリー構造を公開します。PdfDictionary と PdfArray は、番号ツリーノード内の Nums 配列(この構成要素に対する PDF 仕様独自の名称、ISO 32000-1 §7.9.7 — Java シンボルではありません)を走査するために使用されます。これは、タグ付けされた PDF ドキュメントの論理構造を操作するための最下位レベルの API です。

参照

 日本語