Как получить TextField из AcroFields с помощью iText/Sharp?

Я использую iTextSharp, чтобы перебрать поля в AcroFields Коллекция, поэтому я могу установить различные свойства на аннотации. Я разработал, как получить большинство свойств для каждого из полей аннотации, но хотел бы иметь возможность привести отдельную аннотацию к правильному объекту поля (т. Е. TextField, PushButtonField, RadioCheckField, так далее.).

Если не считать создания нового TextField, читая и затем устанавливая все параметры / свойства, связанные с ним, есть краткий способ получить:

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

Я использую очень старую версию iTextSharp (4.0.6.0). Я не могу обновиться до последней версии, так как между 4 и 5 имеются серьезные изменения.

Дополнительная информация: Мои PDF-файлы имеют несколько повторяющихся полей (например, на двух страницах есть имя клиента), поэтому установка свойства с использованием только имени ключа может иметь непредвиденные побочные эффекты. Одно поле может быть выровнено по левому краю, а другое - по центру.

2 ответа

Решение

К сожалению нет, TextField, PushButtonField и другие являются частью абстракции iText для создания документов, и нет встроенного способа отменить AcroFields.Item Возврат к одному из них.

Вы можете использовать GetFieldType() во время итерации 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;
Другие вопросы по тегам