itextsharp从javascript添加一个表行

时间:2014-06-30 03:31:19

标签: itextsharp

如何在可编辑PDF中使用iTextSharp从JavaScript添加新表格行?请注意,下面是我尝试从javascript添加新表格行的代码,

/* to register the javascript to call when the button on click*/
field.Action = PdfAction.JavaScript("this.jsAddRow('" + table + "')", writer);

以下是Javascript函数,

function jsAddRow(objTable) {
    /* Add a new row*/
    objTable.Row1.instanceManager.addInstance();
}

1 个答案:

答案 0 :(得分:1)

您的问题是错误的,您没有做任何努力来澄清或纠正您的问题。如果你不能正确地说出问题,你不应该期待答案!不过,我会试着看一下我的水晶球并找到答案。

您说您有一个可编辑的PDF,这导致您相信您有一个PDF表单。你没有告诉我们是否

  • 您有基于AcroForm技术的表单,或
  • 基于XML Forms Architecture(XFA)的表单。

根据您的代码,可以猜测您有一个AcroForm。您可以创建一个操作字典,并希望将此操作添加到字段字典中。这些是PDF对象,也就是构建AcroForm表单的方式。

但是,您说要添加一行,这在AcroForms的上下文中是不可能的,这只能在XFA的上下文中实现。由于XFA表单是使用XML构造的,因此很明显,您尝试将操作字典添加到字典字典中不起作用。你应该操纵XML!

您是否理解为什么人们在阅读您的问题时会感到困惑?您的问题存在矛盾,您没有做任何努力来澄清,而不是StackOverflow,而不是iText Software的销售人员。

请查看FillXFA示例。此示例的表单(purchase_order.pdf)包含动态表:

enter image description here

单击“添加项目”按钮时,会添加更多行。这是通过JavaScript在Adobe LiveCycle Designer中创建PDF的人添加的。 您不能像将JavaScript添加到AcroForm字段那样将此JavaScript添加为Action字典!!! 此按钮使用XML定义,JavaScript是XML的一部分!如果要创建此类表单,则需要使用Adobe LiveCycle Designer等工具来创建动态表单。 按照设计,AcroForm表单永远不会动态!!!

现在假设您有一个表单,其中有一个按钮说“添加项目”或“添加行”,您如何使用iText触发?那么,你没有!这些按钮意味着被人类压迫。您可以通过添加数据使用iText添加行!例如:如果我们以XML文件的形式添加data.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();
}

您不需要JavaScript ,也不需要“添加项目”或“添加行”按钮来执行此操作。这只是添加正确数据的问题。这显示在网站的XfaMovies示例中:xfa_movies.pdf是单页PDF,没有任何按钮。我们注入了120部电影的数据:movies.xml。结果是23页PDF,xfa_filled_in.pdf

再一次,如果你听不好:这只有在使用XFA技术时才有可能。使用AcroForm技术可以 !!!