如何使用iText单击PDF表单中的按钮?

如何使用iText单击PDF表单中的按钮?,pdf,itext,Pdf,Itext,我必须用一些数据填写PDF表格。此表单包含几个带有“添加”按钮的表格,该按钮可向该表格添加带有输入的新行,例如“国外专利文件”。 我需要在我的代码中使用iText“单击”这个按钮几次,添加必要的行,在那里获取输入名称并填充它们。如何使用iText执行此操作?谁能给我一个代码示例 我的PDF格式文件 此文件是预定义的,我无法重新生成它。您不能以编程方式“单击”按钮。您只需提供必要的数据,表单就会适应 参见示例。我们有一个类似这样的 public void manipulatePdf(String

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

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

此文档有一个“添加项目”按钮,用于添加更多行项目(这将导致在必要时创建更多页面)。该按钮只有在有GUI的情况下才有意义,但是当您以编程方式填写表单时,没有任何按钮可按。您只需向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();
}
结果如下所示:

如您所见,添加了多行,而没有按任何按钮

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

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

参见示例。我们有一个类似这样的

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

此文档有一个“添加项目”按钮,用于添加更多行项目(这将导致在必要时创建更多页面)。该按钮只有在有GUI的情况下才有意义,但是当您以编程方式填写表单时,没有任何按钮可按。您只需向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();
}
结果如下所示:

如您所见,添加了多行,而没有按任何按钮


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

如何使文档成为纯XFA表单?从XML填充数据时,是否无法忽略现有AcroForm字段?方法是从表单字典中删除
字段
数组,并从页面中删除小部件注释(如果有的话;我刚刚检查了表单字典,出乎意料的是,我注意到它包含了一个非空的
字段
数组;这对于动态表单来说非常奇怪)。您的解决方案正在运行,具有类似的动态表,并用数据填充。@nikolai.serdiuk表示解决方案正在运行的典型方式是投票表决。如何使文档成为纯XFA表单?从XML填充数据时是否无法忽略现有的AcroForm字段?方法是从表单d中删除
字段
数组ictionary,并从页面中删除小部件注释(如果有;我刚刚检查了表单字典,令我惊讶的是,它包含一个非空的
字段
数组;这对于动态表单来说非常奇怪)。您的解决方案正在运行,具有类似的动态表,并用数据填充。@nikolai.serdiuk表示解决方案正在运行的典型方式是向上投票。