【发布时间】:2013-11-25 07:27:16
【问题描述】:
我正在使用 iText 阅读 pdf 文件。我的 pdf 中有 20 个具有不同 fillColor 属性的 Acro 文本字段。我试图读取属性但无法读取。有什么方法可以在java中获取具有特定颜色的字段作为它们的fillcolor属性?
编辑: 我使用以下 Adobe Javascript 在 pdf 中创建了 acro 字段
var oFld = this.addField("nameOfField", "button", 0, fldRect);
if (oFld != null) {
oFld.buttonSetCaption("");
oFld.borderStyle = border.s;
oFld.fillColor = color.gray;
oFld.textColor = color.white;
oFld.lineWidth = 1;
}
更新:
现在我可以读取颜色属性了。
不确定这样做是否正确?
if(dict.getAsDict(PdfName.MK).get(PdfName.BG) !=null){
if(dict.getAsDict(PdfName.MK).get(PdfName.BG).toString().trim().equals("
[0.0, 1.0, 0.0]")){
System.out.println(entry.getKey());
System.out.println("Green");
}
if(dict.getAsDict(PdfName.MK).get(PdfName.BG).toString().trim().equals("
[1.0, 0.0, 0.0]")){
System.out.println(entry.getKey());
System.out.println("Red");
}
}
【问题讨论】:
-
请提供有问题的 PDF。只是为了确保 Javascript 在 iText 处理它之前已应用于 PDF,并且您不希望 iText 执行 Javascript,对吗?
-
做与不做的正确方法 - 好吧,用字符串比较检查不是正确的方法。这些是数字,应该检查为数字。此外,您最初的
if子句if(dict.getAsDict(PdfName.MK).get(PdfName.BG) !=null)在没有 MK 字典的情况下失败。 -
感谢您指出, if(ict.getAsDict(PdfName.MK)!=null) 应该避免空指针异常以及比较,我应该遍历 [1.0, 0.0, 0.0] 和比较每个数字或如何进行数字比较? @mkl
-
PdfName.BG的值是一个(直接或间接)数组。因此,将其作为数组获取。然后你可以迭代。但请记住,数组元素的数量可能不同。 @Bruno 的回答包含相关信息。 -
@mkl 我正在使用以下代码来比较颜色。 stackoverflow.com/questions/20193997/…