我可以使用iText在PDF中找到字段的bordercolor吗?

时间:2015-02-04 02:39:30

标签: pdf itext acrofields

是否有使用iText最新版本在我的PDF中找到特定字段的bordercolor?我可以得到AcroField.Item,但我没有看到从那里获得bordercolor的选项。

1 个答案:

答案 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时,我们看一下该字段的字段字典/窗口小部件注释,我们看到以下结构:

Internal structure of a form field

我们看到/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。