是否有使用iText最新版本在我的PDF中找到特定字段的bordercolor?我可以得到AcroField.Item,但我没有看到从那里获得bordercolor的选项。
答案 0 :(得分:1)
请查看此PDF:text_fields.pdf。此PDF是使用TextFields示例创建的。以下代码段用于设置名称为text_2
的字段的边框:
text.setBorderStyle(PdfBorderDictionary.STYLE_SOLID);
text.setBorderColor(BaseColor.BLUE);
text.setBorderWidth(2);
现在,当我们使用iText RUPS查看PDF时,我们看一下该字段的字段字典/窗口小部件注释,我们看到以下结构:
我们看到/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。