【问题标题】:How to click a button in PDF form with iText?如何使用 iText 单击 PDF 表单中的按钮?
【发布时间】:2018-06-12 02:11:42
【问题描述】:

我必须用一些数据填写 PDF 表单。此表格包含一些带有“添加”按钮的表格,这些表格将带有输入的新行添加到该表格中,例如“外国专利文件”。 我需要使用 iText 在我的代码中“单击”这个按钮几次,添加必要的行,在那里获取输入名称并填写它们。我怎样才能用 iText 做到这一点?谁能给我一个代码示例?

我的 PDF 文件格式为 https://drive.google.com/open?id=0BwtWU1543EbTQ3A3b2dZcW9qYk0

此文件是预定义的,我无法重新生成它。

【问题讨论】:

    标签: pdf itext


    【解决方案1】:

    您不会以编程方式“单击”按钮。您只需提供必要的数据,表单就会适应。

    参见FillXFA 示例。我们有一个purchase_order.pdf,看起来像这样:

    此文档有一个“添加项目”按钮,用于添加更多订单项(这会导致在必要时创建更多页面)。该按钮只有在有 GUI 时才有意义,但是当您以编程方式填写表单时,没有任何按钮可以按下。您只需向 XML 提供数据(例如 data.xml),如下所示:

    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();
    }
    

    结果如下所示:purchase_order_filled.pdf

    如您所见,添加了多行,无需按任何按钮。

    重要提示:我看到您有一个混合文档。我认为您应该将其设为纯 XFA 表格。如果您保留 AcroForm 字段,此代码将不起作用。

    【讨论】:

    • 如何使文档成为纯 XFA 表单?从 XML 填充数据时是否可以忽略现有的 AcroForm 字段?
    • 通过从表单字典中删除 Fields 数组,并从页面中删除小部件注释(如果有的话;我刚刚检查了表单字典,令我惊讶的是,我注意到它包含一个 @ 987654331@ 非空数组;对于动态表单,这非常奇怪)。
    • 您的解决方案正在运行,有类似的动态表,用数据填充它。
    • @nikolai.serdiuk 说解决方案有效的典型方式是对答案进行投票。
    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 2016-08-24
    • 2021-07-22
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多