使用PDFBox将文件附件添加到XFA表单

时间:2018-06-16 01:13:23

标签: java pdf-generation pdfbox

我有一个用Adobe LiveCycle Designer 8.0创建的pdf表单,其中有几个文本字段,其中包含用于添加,查看和删除文件附件的按钮,我正在尝试使用PDFBox(2.0.9)自动填充表单。我从pdf的xfa找到了xfa:datasets节点,然后用新的xml替换了xfa:data节点,然后我添加了附件并保存了文档。

我能够在文档中看到我的附件,但在文本字段中看不到文件名。这个过程适用于其他pdf表单,但不适用于使用LiveCycle制作的表格,我不确定我是否缺少任何其他步骤。

以下是代码:

    PDDocument doc = null;
    doc = PDDocument.load(new File(srcFile));   
    PDAcroForm aform = doc.getDocumentCatalog().getAcroForm();
    PDXFAResource xfa = aform.getXFA();
    org.w3c.dom.Document xmlDoc = xfa.getDocument();

    //I find the data node under datasets node in xmlDoc
    //and replace it with new xml for the attachment
    xmlDoc = prepareXFAForm(xmlAttachment, xmlDoc);

    //replace the XFA with modified xml
    COSStream cs = doc.getDocument().createCOSStream();
    OutputStream os = cs.createOutputStream(COSName.FLATE_DECODE);

    Result outputTarget = new StreamResult(os);
    Transformer t = TransformerFactory.newInstance().newTransformer();  
    t.transform(new DOMSource(xmlDoc), outputTarget);

    PDXFAResource resout = new PDXFAResource(cs);
    aform.setXFA(resout);
    os.close();


    //add attachments
    PDDocumentNameDictionary names = 
                  new PDDocumentNameDictionary(doc.getDocumentCatalog() );
    names.setEmbeddedFiles( efTree );
    doc.getDocumentCatalog().setNames( names );

    doc.save(destFile);

任何帮助将不胜感激!

0 个答案:

没有答案