【问题标题】:How do I get a TextField from AcroFields using iText/Sharp?如何使用 iText/Sharp 从 AcroFields 获取 TextField?
【发布时间】:2015-10-13 21:50:02
【问题描述】:

我正在使用 iTextSharp 循环遍历 AcroFields 集合中的字段,以便我可以在注释上设置各种属性。我已经研究出如何为每个注释字段提取大部分属性,但希望能够将单个注释转换为正确的字段对象(即TextFieldPushButtonFieldRadioCheckField 等.).

除了创建一个新的TextField,读取并设置与之关联的所有设置/属性之外,有没有一种简洁的方法可以访问:

int index = 0;
AcroFields acroFields = stamper.AcroFields;
TextField tf = acroFields.GetTextField(acroField.Key.ToString(), index);

我使用的是非常旧版本的 iTextSharp (4.0.6.0)。我无法升级到最新版本,因为 4 和 5 之间有重大更改。

其他信息: 我的 PDF 文件有多个重复字段(例如,两个页面有客户名称),因此仅使用键名设置属性可能会产生意想不到的副作用。一个字段可能左对齐,而另一字段居中。

【问题讨论】:

    标签: java c# itextsharp itext


    【解决方案1】:

    很遗憾,TextFieldPushButtonField 和其他都是 iText 用于文档创建的抽象的一部分,并且没有内置方法可以将 AcroFields.Item 对象反转回其中之一。

    【讨论】:

      【解决方案2】:

      您可以在迭代AcroFields 时使用GetFieldType()。但并非所有属性都可以更改。如果有任何问题,请告诉我。

      AcroFields acroFields = reader.AcroFields;
      foreach (KeyValuePair<String, AcroFields.Item> field in acroFields.Fields)
      {
          // Check to see if it is the type we want.
          Boolean isTextField = (AcroFields.FIELD_TYPE_TEXT == acroFields.GetFieldType(field.Key));
      
          if (isTextField)
          {
              // Change the text.
              acroFields.SetField(field.Key, "new  string");
          }
      }
      

      可用的常量 int 字段类型有:

      public const int FIELD_TYPE_CHECKBOX = 2;
      public const int FIELD_TYPE_COMBO = 6;
      public const int FIELD_TYPE_LIST = 5;
      public const int FIELD_TYPE_NONE = 0;
      public const int FIELD_TYPE_PUSHBUTTON = 1;
      public const int FIELD_TYPE_RADIOBUTTON = 3;
      public const int FIELD_TYPE_SIGNATURE = 7;
      public const int FIELD_TYPE_TEXT = 4;
      

      【讨论】:

      • 我的 PDF 文件有多个重复字段(例如,两个页面有客户名称),因此仅使用键名设置属性可能会产生意想不到的副作用。一个字段可能左对齐,而另一字段居中。
      • @AdamZuckerman,我相信我的 iTextSharp 版本,即使在名称相同的情况下,通过 acroFields.Fields 报告的键值也是唯一的(用点分隔)。 (如这里所示:stackoverflow.com/questions/6714255/…
      • 我使用的版本 (4.0.6.0) 不会报告重复的字段,并用点表示您引用的字段实例。
      • @AdamZuckerman 请编辑您的问题以解释您要设置的属性(它不能是值,对吗?)。
      • 我想要该字段的所有属性。我已经编写了一个可以为我执行此操作的函数,但我正在寻找内置的东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      相关资源
      最近更新 更多