Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 填充动态XFA pdf表单itext_Java_Pdf_Adobe_Itext_Xfa - Fatal编程技术网

Java 填充动态XFA pdf表单itext

Java 填充动态XFA pdf表单itext,java,pdf,adobe,itext,xfa,Java,Pdf,Adobe,Itext,Xfa,我有一个基于XFA的pdf表单,需要使用java进行填充。 你能推荐最好的方法吗。 我能够使用iText为pdf生成xfa xml public void readXfa(String srcPdfFilename, String destXMLFilename) throws IOException, ParserConfigurationException, SAXException, TransformerFactoryConfigurationError, TransformerExce

我有一个基于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表单

我们将衷心感谢您的帮助和建议。

请看一下示例。此示例的表单()包含一个动态表:

现在我们添加一组XML文件形式的数据,我们得到以下结果:

如您所见,添加了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();
}
这里还有另一个例子:。该文档为单页PDF,没有任何按钮。我们注入了120部电影的数据:。结果是23页的PDF


注意:阅读代码时,您会得到一个包含完整XFA流的XML。你不需要这些,你只需要数据。这就是我添加XML文件链接的原因:它们不包含任何XFA特定的标记。

感谢您的帮助。我的问题是:1。从XFA pdf表单生成的XML有什么用途。2.考虑到我已经使用代码生成了表单和XML,我们如何创建用于填充PDF的XML。另外,请建议如何处理表单的动态元素。(1)从表单中提取的完整XML包含模板、数据描述,可能还有数据集、javascript等。如果您想更改表单,可以使用它(如果您知道XFA语法,因为iText在这里对您没有帮助;这是一个XML操作的问题)。(2)创建表单的人使用了他选择的模式,基于他喜欢的数据结构,使用最符合他需要的标记,。。。这就是XFA的威力:有人可以使用自己的XML模式创建表单。使用该模式。它不在XFA表单中,除了一些XSD风格的数据描述(实际上不是XSD)。(3)如何处理表单的动态元素?我不明白这个问题。如果您有重复的子表单,它们将适应您提供的数据。为什么它们需要额外的处理?谢谢,所以除非我有用于填充PDF的输入XML格式,否则无法生成输入XML格式。从您所说的,我同意,如果没有输入XML格式,我就无法继续前进。你能确认一下吗。我假设使用xfaformapi中的值来标识节点并生成它。Pdf具有相互动态影响的字段。与选定的某些下拉列表一样,启用/禁用其他字段或使用值填充其他字段。因此,我的问题是确定如何用适当的值填充下拉列表