この投稿で説明されているように(PDFでPDFIDを削除)/ IDは「トレーラー辞書」の推奨エントリです(AcroFormが暗号化されている場合は必須です)。
iTextを使用すると、IDはトレーラー内の2つのオブジェクトPdfArray
の1つとしてアクセスされます。文字列値はそれぞれがバイト配列の表現であるため、ゴミのように見えます。これらは、「元の」および「変更された」に必要な16進値です。PdfString
PdfDictionary
次のコードは、2つのIDを出力します。これは、Acrobat Proからのエクスポートなどに対して検証できます(NBHex.encodeHexString
はApache commons-codecです)。
public void printIds(PdfReader reader) {
PdfDictionary trailer = reader.getTrailer();
if (trailer.contains(PdfName.ID)) {
PdfArray ids = (PdfArray) trailer.get(PdfName.ID);
PdfString original = ids.getAsString(0);
PdfString modified = ids.getAsString(1);
System.out.println(Hex.encodeHexString(original.getBytes()));
System.out.println(Hex.encodeHexString(modified.getBytes()));
}
}