首页 文章

填充动态XFA pdf表单itext

提问于
浏览
2

我有一个基于XFA的pdf表单,我们需要使用java填充 . 你能说出最好的方法吗?我能够使用iText为pdf生成xfa xml .

public void readXfa(String srcPdfFilename, String destXMLFilename) throws IOException, ParserConfigurationException, SAXException, TransformerFactoryConfigurationError, TransformerException {

    PdfReader reader = new PdfReader(srcPdfFilename);
    XfaForm xfa = new XfaForm(reader);
    Document doc = xfa.getDomDocument();

    Transformer tf = TransformerFactory.newInstance().newTransformer();
    tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
    tf.setOutputProperty(OutputKeys.INDENT, "yes");

    FileOutputStream os = new FileOutputStream(destXMLFilename);
    tf.transform(new DOMSource(doc), new StreamResult(os));

    reader.close();
}

我有从上面的代码生成的Pdf和Xfa XML . 你能否建议我如何继续前进,因为我似乎没有想法 . 我试图检查XFA文档,但似乎不对 . 我没有xml,pdf非常复杂,因为它有很多字段,是一个动态的XFA pdf表单 .

非常感谢您的帮助和建议 .

1 回答

  • 3

    请看一下FillXFA示例 . 此示例具有包含动态表的表单(purchase_order.pdf):

    enter image description here

    现在我们添加data.xml,它是XML文件形式的一组数据,我们得到这个结果:purchase_order_filled.pdf

    enter image description here

    如您所见,添加了XML文件中存在的数据,以及许多空行(与XML中的空数据行相对应) . 当我们添加许多行时,我们甚至触发了一个新页面添加到PDF中 .

    这就是它的完成方式:

    public void manipulatePdf(String src, String dest)
        throws IOException, DocumentException {
        PdfReader reader = new PdfReader(src);
        PdfStamper stamper = new PdfStamper(reader,
                new FileOutputStream(dest));
        AcroFields form = stamper.getAcroFields();
        XfaForm xfa = form.getXfa();
        xfa.fillXfaForm(new FileInputStream(XML));
        stamper.close();
        reader.close();
    }
    

    这里有另一个例子:XfaMovies . xfa_movies.pdf文档是单页PDF,没有任何按钮 . 我们注入了120部电影的数据:movies.xml . 结果是23页PDF,xfa_filled_in.pdf .

    NOTE: 读取您的代码,您将获得包含完整XFA流的XML . 您不知道为什么我添加了XML文件的链接:它们不包含任何特定于XFA的标记 .

相关问题