2017-04-20 3 views
0

テンプレートPDFのフィールドの位置と値を含むAcroForm全体を新しい空のPDFファイルにコピーする必要があります。どうやってやるの?IText5またはIText7を使用して、AcroFormフィールドをある文書から新しい空白文書にコピー/移動する方法はありますか?

簡潔に言えば、私はテンプレートから「バックグラウンド」を取り除き、提出されたフォームのみを残す必要があります。 これは、あらかじめ印刷されたテンプレートに印刷される内容のPDFを作成することです。

私はiTextの5を使用していますが、便利な例は

答えて

0

多くの試行錯誤の末、「AcfroFormフィールドを別のPDFにコピーする方法」の解決策が見つかりました。それはiText v7のバージョンです。私はそれがいつか誰かを助けることを願っています。

private byte[] copyFormElements(byte[] sourceTemplate) throws IOException { 
    PdfReader completeReader = new PdfReader(new ByteArrayInputStream(sourceTemplate)); 
    PdfDocument completeDoc = new PdfDocument(completeReader); 

    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    PdfWriter offsetWriter = new PdfWriter(out); 
    PdfDocument offsetDoc = new PdfDocument(offsetWriter); 
    offsetDoc.initializeOutlines(); 
    PdfPage blank = offsetDoc.addNewPage(); 
    PdfAcroForm originalForm = PdfAcroForm.getAcroForm(completeDoc, false); 
    //  originalForm.getPdfObject().copyTo(offsetDoc,false); 
    PdfAcroForm offsetForm = PdfAcroForm.getAcroForm(offsetDoc, true); 

    for (String name : originalForm.getFormFields().keySet()) { 
     PdfFormField field = originalForm.getField(name); 
     PdfDictionary copied = field.getPdfObject().copyTo(offsetDoc, false); 
     PdfFormField copiedField = PdfFormField.makeFormField(copied, offsetDoc); 
     offsetForm.addField(copiedField, blank); 
    } 

    offsetDoc.close(); 
    completeDoc.close(); 
    return out.toByteArray(); 
} 
0

あなたはPdfCopyFormsオブジェクト確認しました提供されるならば、私は7に切り替えることができます。

はあなたが1つ(またはそれ以上)を追加することができますし、PDF文書を既存の新しいPDFを作成し、別のPDF文書のフォームをこの新しいPDFに追加することができます。

私は例を見つけられませんでしたが、あなたはこのような何かを試みることができる:

PdfReader reader1 = new PdfReader(src1); // a document with a form 
PdfReader reader2 = new PdfReader(src2); // a document without a form 
PdfCopyForms copy = new PdfCopyForms(new FileOutputStream(dest)); 
copy.AddDocument(reader1); // add the document without the form 
copy.CopyDocumentFields(reader2); // add the fields of the document with the form 
copy.close(); 
reader1.close(); 
reader2.close(); 

は、私はクラスが廃止されていることがわかります。私はiText 7がこれをもっと簡単にするか、クラスに技術的な問題があったからです。

+0

試してみましょう。結果をお待ちください:) – Antoniossss

+0

IText7の例を提供できますか?私はIText7を使用してフィールドのコピーを作成しようとしている間接参照例外を取得しています – Antoniossss

関連する問題