Можно ли найти цвет границы поля в PDF с помощью iText?

Есть ли способ найти цвет границы определенного поля в моем PDF-файле, используя последнюю версию iText? Я мог бы получить AcroField.Item, но я не вижу возможности получить оттуда bordercolor.

1 ответ

Решение

Пожалуйста, посмотрите на этот PDF: text_fields.pdf. Этот PDF был создан на примере TextFields. Следующий фрагмент кода был использован для установки границы поля с именем text_2:

text.setBorderStyle(PdfBorderDictionary.STYLE_SOLID);
text.setBorderColor(BaseColor.BLUE);
text.setBorderWidth(2);

Теперь, когда мы смотрим внутри PDF, используя iText RUPS, и мы рассматриваем аннотацию словаря / виджета для этого поля, мы видим следующую структуру:

Внутренняя структура поля формы

Мы видим /BS словарь, который определяет стиль сплошной границы (значение для /S ключ /S) и ширина границы (/W) со значением 2.

Мы также видим, что границы цвета (/BC) запись /MK запись представляет собой массив с тремя значениями: [ 0 0 1 ], Это означает, что цвет границы - это цвет RGB, где значение для Red равно 0, значение для Green равно 0 и значение для Blue равно 1. Это согласуется с тем, что мы установили цвет на BaseColor.BLUE когда мы создали файл.

Вы говорите, что у вас есть AcroField.Item объект для поля. Теперь вам нужно получить объединенный словарь аннотаций для полей / виджетов и следовать пути, указанному в iText RUPS:

AcroFields.Item item = acroFields.getFieldItem(fldName); 
PdfDictionary merged = item.getMerged(0); 
PdfDictionary mk = merged.getAsDict(PdfName.MK);
PdfArray bc = mk.getAsArray(PdfName.BC);

Значения хранятся в массиве bc проинформирует вас о цвете фона. Если у массива есть только одно значение, у вас есть серый цвет, если их три, у вас есть цвет RGB, если их четыре, у вас есть цвет CMYK.

Предупреждение: некоторые значения могут отсутствовать (например, может не быть /BC запись). В этом случае вы можете получить NullPointerExceptions.

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