我可以使用 iText 在 PDF 中找到字段的边框颜色吗?

Can I find bordercolor of a field in PDF using iText?

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

请查看此 PDF:text_fields.pdf. This PDF was created using the TextFields 示例。以下代码片段用于设置名称为 text_2:

的字段的边框
text.setBorderStyle(PdfBorderDictionary.STYLE_SOLID);
text.setBorderColor(BaseColor.BLUE);
text.setBorderWidth(2);

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

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

我们还看到 /MK 条目的边框颜色 (/BC) 条目是一个包含三个值的数组:[ 0 0 1 ]。这意味着边框颜色是 RGB 颜色,其中红色的值为 0,绿色的值为 0,蓝色的值为 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 中的值将告知您背景颜色。如果数组只有一个值,则为 gray 颜色,如果有三个,则为 RGB 颜色,如果有四个,你有 CMYK 颜色。

警告: 某些值可能不存在(例如,可能没有 /BC 条目)。在这种情况下,您可以获得 NullPointerExceptions.