如何使用iText / Sharp从AcroFields获取TextField?

时间:2015-10-13 21:50:03

标签: java c# itextsharp itext

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

如果没有创建新的RadioCheckField,阅读然后设置与之关联的所有设置/属性,是否有简明的方法:

TextField

我使用的是非常旧版本的iTextSharp(4.0.6.0)。我无法升级到最新版本,因为4到5之间存在重大变化。

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

2 个答案:

答案 0 :(得分:3)

不幸的是,TextFieldPushButtonField和其他人都是iText文档创建抽象的一部分,并且没有内置的方法来反转{{1}对象回到其中一个。

答案 1 :(得分:1)

您可以在迭代AcroFields时使用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"); } } 。但并非所有属性都可以更改。如果有任何问题,请告诉我。

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;

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

{{1}}