1

无论如何使用 iText 最新版本在我的 PDF 中找到特定字段的边框颜色?我可以获得 AcroField.Item,但我没有看到从那里获得边框颜色的选项。

4

1 回答 1

1

请查看此 PDF:text_fields.pdf。此 PDF 是使用TextFields示例创建的。以下代码片段用于设置 name 字段的边框text_2

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

现在,当我们使用iText RUPS查看 PDF 内部并查看该字段的字段字典/小部件注释时,我们会看到以下结构:

表单域的内部结构

我们看到一个/BS字典,它定义了一个实心边框样式(/S键的值为)和一个值为 2/S的边框宽度( )。/W

我们还看到条目的边框颜色 ( /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。

于 2015-02-04T07:38:21.890 回答