Как получить свойства AcroField с помощью iText?

Я использую iText для чтения PDF-файла. У меня есть 20 текстовых полей Acro в моем pdf с различными свойствами fillColor. Я пытался прочитать свойства, но не смог прочитать. Есть ли способ, которым мы можем получить поля, которые имеют определенный цвет, как их свойство fillcolor в Java?

РЕДАКТИРОВАТЬ: я создал поля acro в PDF, используя следующий Adobe Javascript

   var oFld = this.addField("nameOfField", "button", 0, fldRect);
    if (oFld != null) {
        oFld.buttonSetCaption("");
        oFld.borderStyle = border.s;
        oFld.fillColor = color.gray;
        oFld.textColor = color.white;
        oFld.lineWidth = 1;
    }

ОБНОВИТЬ:

Теперь я могу читать свойства цвета.

Не уверен, правильно ли это сделать или нет?

  if(dict.getAsDict(PdfName.MK).get(PdfName.BG) !=null){
            if(dict.getAsDict(PdfName.MK).get(PdfName.BG).toString().trim().equals("     
    [0.0, 1.0, 0.0]")){
                System.out.println(entry.getKey());
                System.out.println("Green");
            }
            if(dict.getAsDict(PdfName.MK).get(PdfName.BG).toString().trim().equals("
        [1.0, 0.0, 0.0]")){
                System.out.println(entry.getKey());
                System.out.println("Red");
            }

        }

1 ответ

Решение

Глава 8 моей книги обсуждает поля AcroForm с довольно высокого уровня. Если вы хотите копать глубже, вам нужна глава 13. На странице 449 в таблице 13.11 перечислены различные AcroFields.Item методы. Как вы знаете, поле формы описывается с помощью словаря форм. Визуальное представление (я) поля (или) описывается с использованием одной или нескольких аннотаций виджетов. Вы ищете свойство внешнего вида, поэтому вам нужен словарь аннотаций.

Вы также знаете, что словарь полей и словарь виджетов часто объединяются, когда одно поле соответствует одной аннотации виджета, и поэтому AcroFields.Item класс имеет метод с именем getMerged(), Для каждой аннотации виджета определенного поля он возвращает объединенные свойства поля и аннотацию виджета.

Это теория. Давайте посмотрим на пример: InspectForm

Map<String,AcroFields.Item> fields = form.getFields();
AcroFields.Item item;
PdfDictionary dict;
int flags;
for (Map.Entry<String,AcroFields.Item> entry : fields.entrySet()) {
    out.write(entry.getKey());
    item = entry.getValue();
    dict = item.getMerged(0);
    // inspect dict
}

В примере мы проверяем флаги полей (/FF), которые являются свойствами словаря полей. Вы интересуетесь внешними характеристиками, поэтому, я думаю, вы захотите проверить /MK запись, которая (ISO-32000-1 Таблица 188):

Словарь характеристик внешнего вида (см. Таблицу 189), который должен использоваться при построении динамического потока внешнего вида, определяющего визуальное представление аннотации на странице. Название МК для этой записи имеет только историческое значение и не имеет прямого значения.

Вам нужно будет взглянуть на таблицу 189, чтобы узнать, какие конкретные атрибуты вы хотите:

R integer (необязательно): количество градусов, на которое аннотация виджета должна поворачиваться против часовой стрелки относительно страницы. Значение должно быть кратным 90. Значение по умолчанию: 0.

Массив BC (необязательно): массив чисел, который должен находиться в диапазоне от 0,0 до 1,0, определяя цвет границы аннотации виджета. Количество элементов массива определяет цветовое пространство, в котором должен быть определен цвет: 0 Нет цвета; прозрачный 1 DeviceGray 3 DeviceRGB 4 DeviceCMYK

Массив BG (необязательно): Массив чисел, который должен находиться в диапазоне от 0,0 до 1,0, определяя цвет фона аннотации виджета. Количество элементов массива должно определять цветовое пространство, как описано для BC.

Текстовая строка CA (Необязательно; только поля кнопок): обычная подпись аннотации виджета, которая должна отображаться, когда она не взаимодействует с пользователем. В отличие от остальных записей, перечисленных в этой таблице, которые применяются только к аннотациям виджетов, связанным с полями кнопок (см. Кнопки в 12.7.4.2, "Поля кнопок"), запись CA может использоваться с любым типом полей кнопок, включая флажки (см. флажки в 12.7.4.2, "Поля кнопок") и переключатели (радиокнопки в 12.7.4.2, "Поля кнопок").

Текстовая строка RC (Необязательно; только поля кнопок): заголовок переноса аннотации виджета, который должен отображаться, когда пользователь перемещает курсор в свою активную область, не нажимая кнопку мыши.

Текстовая строка AC (Необязательно; только для полей кнопок): альтернативный (вниз) заголовок аннотации виджета, который отображается при нажатии кнопки мыши в его активной области.

Когда вы запрашиваете цвет заливки, я предполагаю, что вы имеете в виду цвет фона, а это значит, что вам нужно взглянуть на запись BC для цветового пространства и на запись BG для фактического значения цвета.

Другие вопросы по тегам