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 です。