Можно ли найти цвет границы поля в 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
запись). В этом случае вы можете получить NullPointerException
s.