0

私は Java で PDFBox 1.2.1 を使用しており、複数ページのターゲット PDF を作成するためのテンプレートとして、acro フォームを含む単一ページの PDF ドキュメントを使用しようとしています。

PDDocument sourceDocument = PDDocument.load(fileStream);
PDDocument targetDocument = new PDDocument();
PDDocumentCatalog sourceDocCatalog = sourceDocument.getDocumentCatalog();
PDAcroForm acroFormFromSource = sourceDocCatalog.getAcroForm();
targetDocument.getDocumentCatalog().setAcroForm(acroFormFromSource);
PDPage templatePdfPage = (PDPage) sourceDocument.getDocumentCatalog().getAllPages().get(0);

  for (int i = 0; i < 5; i++) {

    targetDocument.addPage(templatePdfPage);
    PDDocumentCatalog targetDocumentsDocumentCatalog = targetDocument.getDocumentCatalog();
    PDAcroForm acroForm = targetDocumentsDocumentCatalog.getAcroForm();
    acroForm.getField("Text1").setValue("Car " + i);
  }

残念ながら、生成されたターゲット pdf には 5 ページが含まれていますが、すべてのページに同じ値「Car 4」の Text1 フィールドがあります。したがって、すべてのページは同じアクロ フォームです。すべてのページに新しい一意の acro フォームを生成することは何とか可能ですか、それとも私の使用例に対して他の可能な解決策はありますか?

4

1 に答える 1

0

問題は、すべてのページに同じ Java オブジェクトを使用していることだと思います。acroFormFromSourceしたがって、4 ページ (0 ~ 4 ページの最後のページ) に「Text1」フィールドを設定すると、5 ページすべてに設定されます。

ページごとに元の PDAcroForm のコピーを新たに作成する必要があると思います。コピーを作成する最も簡単な方法は、CosDictionary( COSDictionary( COSDictionary dict )) のコピー コンストラクターを使用することだと思います。ただし、これは浅いコピーを作成することに注意してください。

于 2012-09-16T17:50:44.427 に答える