既存の複数の PDF を単一の新しい PDF にインポートする必要があります。コードの一部は、 iText in Action 2nd editionのセクション 6.2.1 のサンプル コードと同様に機能します。
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(
document, new FileOutputStream(RESULT));
document.open();
PdfPTable table = new PdfPTable(2);
PdfReader reader = new PdfReader(MovieTemplates.RESULT);
int n = reader.getNumberOfPages();
PdfImportedPage page;
for (int i = 1; i <= n; i++) {
page = writer.getImportedPage(reader, i);
table.addCell(Image.getInstance(page));
}
document.add(table);
document.close();
ただし、注釈付きの入力可能な PDF (この場合、これらの PDF には既にデータが入力されています) を処理すると、新しい PDF では入力されたデータがすべて失われることに気付きました。
本の同じセクションで答えを見つけました。
ページのコンテンツをレンダリングするために必要なリソースと、ページのインタラクティブな機能の違いを理解することが重要です。一般に、これらの機能は注釈と呼ばれます。これには、リンク、テキスト注釈、およびフォーム フィールドが含まれます。注釈はコンテンツ ストリームの一部ではありません。これらは、ページのリソース ディクショナリにはリストされていませんが、注釈ディクショナリにはリストされています。これらのインタラクティブな機能は、 を使用する場合はコピーされません。つまり、クラスのメソッドを
PdfImportedPage
使用してページをコピーすると、すべてのインタラクティブ性が失われます。getImportedPage()
PdfWriter
しかし、それらの注釈を保持するための解決策は何ですか?