首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用iText/Sharp从TextField中获得AcroFields?

如何使用iText/Sharp从TextField中获得AcroFields?
EN

Stack Overflow用户
提问于 2015-10-13 21:50:02
回答 2查看 2.2K关注 0票数 1

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

除了创建一个新的TextField,读取并设置与其相关的所有设置/属性之外,是否有一种简洁的方法可以实现:

代码语言:javascript
复制
int index = 0;
AcroFields acroFields = stamper.AcroFields;
TextField tf = acroFields.GetTextField(acroField.Key.ToString(), index);

我使用的是一个非常旧的iTextSharp版本(4.0.6.0)。我无法升级到最新的版本,因为有打破之间的变化4和5。

附加信息: My文件有多个重复字段(例如,两个页面有客户名称),因此只使用键名设置属性可能会产生意外的副作用。一个字段可能是对齐的,而另一个字段是居中的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-14 13:51:51

不幸的是,TextFieldPushButtonField和其他人都是iText文档创建抽象的一部分,也没有内置的方法将AcroFields.Item对象反转回其中之一。

票数 3
EN

Stack Overflow用户

发布于 2015-10-14 18:14:53

您可以在迭代GetFieldType()时使用AcroFields。但并不是所有的属性都可以更改。如果有什么问题请告诉我。

代码语言:javascript
复制
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字段类型如下:

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33113255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档