我正在使用iText阅读pdf文件。我的pdf中有20个Acro文本字段,具有不同的fillColor属性。我试图阅读属性,但无法阅读。有没有什么办法可以让我们在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");
}
}
答案 0 :(得分:5)
Chapter 8从相当高的层面讨论了AcroForm字段。如果你想深入挖掘,你需要chapter 13。在页449,表13.11列出了不同的AcroFields.Item
方法。如您所知,使用表单字典描述表单字段。使用一个或多个小部件注释来描述(或者)描述字段的视觉表示。您正在寻找外观的属性,因此您需要注释字典。
您还知道,当一个字段与一个窗口小部件注释相对应时,通常会合并字段字典和窗口小部件字典,这就是AcroFields.Item
类具有名为getMerged()
的方法的原因。对于特定字段的每个窗口小部件注释,它返回字段和窗口小部件注释的合并属性。
这就是理论。我们来看一个例子:InspectForm
Map<String,AcroFields.Item> fields = form.getFields();
AcroFields.Item item;
PdfDictionary dict;
int flags;
for (Map.Entry<String,AcroFields.Item> entry : fields.entrySet()) {
out.write(entry.getKey());
item = entry.getValue();
dict = item.getMerged(0);
// inspect dict
}
在示例中,我们检查字段标志(/FF
),它们是字段字典的属性。你对外观特征感兴趣,所以我想你要检查/MK
条目,即(ISO-32000-1表188):
应为的外观特征字典(见表189) 用于构造指定的动态外观流 注释在页面上的视觉呈现。这个名字MK 入境仅具有历史意义,没有直接意义。
您需要查看表189以找出所需的特定属性:
R 整数(可选):小部件的度数 注释应相对于页面逆时针旋转。该 value应为90的倍数。默认值:0。
BC 数组(可选): 一组数字,应在0.0到1.0范围内指定 窗口小部件注释边框的颜色。数组的数量 元素决定了颜色应该的颜色空间 定义:0没有颜色;透明1 DeviceGray 3 DeviceRGB 4 DeviceCMYK
BG 数组(可选):一组数字,其范围应为0.0 指定小部件注释背景的颜色。 数组元素的数量应确定颜色空间,如 为BC描述。
CA 文字字符串(可选;仅限按钮字段): 小部件注释的常规标题,应在其显示时显示 不与用户交互。与列出的其余条目不同 在此表中,仅适用于与之关联的窗口小部件注释 按钮字段(参见12.7.4.2中的按钮,“按钮字段”),. CA条目可以与任何类型的按钮字段一起使用,包括检查 框(参见12.7.4.2中的复选框,“按钮字段”)和单选按钮 (12.7.4.2中的单选按钮,“按钮字段”)。
RC 文字字符串(可选;仅限按钮字段):窗口小部件注释的翻转 标题,用户将光标移入时显示 它的活动区域没有按下鼠标按钮。
AC 文字字符串(可选;仅限按钮字段):窗口小部件注释的备用 (向下)标题,当鼠标按钮显示时,将显示 在其活跃区域内按下。
当您要求填充颜色时,我假设您指的是背景颜色,这意味着您必须查看颜色空间的 BC 条目,并且< strong> BG 输入实际颜色值。