【问题标题】:Why can't ABCpdf .Net see the fields in my pdf when created with Adobe LiveCycle?为什么 ABCpdf .Net 在使用 Adob​​e LiveCycle 创建时看不到我的 pdf 中的字段?
【发布时间】:2012-06-10 21:18:34
【问题描述】:

我正在开发一个 PDF Filler 应用程序,该应用程序将使用 Web 表单中的值填充 PDF 中的字段。我的代码适用于我拥有的旧 PDF,但使用 Adob​​e LiveCycle Designer 创建的新 PDF 似乎无法看到 PDF 中的字段。建议将 PDF 保存为“Adobe 静态 PDF 表单”,但这并没有解决问题。

这是我的代码:

        Doc doc = new Doc();
        doc.Read(Server.MapPath("~/pdfs/test.pdf"));

        foreach (Field field in doc.Form.Fields)
        {
            if (field.Name == "StreetAddress")
            {
                field.Value = StreetAddress.Text;
            }
        }

在我的代码中,doc.Form.Fields 仅包含 1 个字段,其名称为“form1[0]”,尽管 PDF 中实际上有 7 个字段。

任何帮助将不胜感激。

【问题讨论】:

  • 我对此进行了更多研究,发现 Adob​​e LiveCycle 似乎创建了带有图层的 PDF。这会导致字段名称从“StreetAddress”变为 form1[0].#subform[0].StreetAddress[0]。有没有办法让 Adob​​e Live Cycle 保留原始字段名称“StreetAddress”。
  • 我建议您最好联系支持人员解决此问题。或者你可以谷歌寻找替代方案。你觉得怎么样?
  • 我已经在没有什么帮助的情况下完成了这两项工作,但我终于找到了解决方案。

标签: .net pdf abcpdf livecycle-designer


【解决方案1】:

在大量使用代码之后,我已经找到了答案。使用 GetFieldNames() 函数获取字段名称数组,因为这将返回所有字段,无论级别如何。有了这个,您可以循环通过名称创建字段的数组。我遇到的唯一其他问题是字段名称仍采用“form1[0].#pageSet[0].Page1[0].StreetAddress[0]”格式,但如果您使用 PartialName 属性,它将返回“StreetAddress [0]" 因此您只需删除最后 3 个字符即可获得正确的字段名称。

    string[] fieldNames = doc.Form.GetFieldNames();
    foreach (string fieldName in fieldNames)
    {
      Field field = doc.Form[fieldName];
      if(field.PartialName.Substring(0, field.PartialName.Length - 3).ToLower().Equals("streetaddress"))
      {
        field.Value = "whatever value you want";
      }
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2010-10-04
    • 1970-01-01
    • 2021-06-07
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多