当前位置: 首页 > 知识库问答 >
问题:

如何使用iText获取AcroField属性?

颜杰
2023-03-14

我正在使用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");
            }

        }

共有1个答案

郗福
2023-03-14

我的书的第8章从一个相当高的层次讨论了AcroForm字段。如果你想深入挖掘,你需要第13章。在第449页,表13.11列出了不同的AcroFields。项目方法。如您所知,表单字段是使用表单字典描述的。字段的可视化表示是使用一个或多个小部件注释描述的。您正在查找外观的属性,因此需要注释字典。

您还知道,当一个字段对应一个小部件注释时,字段字典和小部件字典通常会合并,这就是为什么AcroFields。Item类有一个名为getMerged()的方法。对于特定字段的每个小部件注释,它返回字段和小部件注释的合并属性。

这就是理论。让我们看一个例子:检查表

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 integer(可选):小部件注释相对于页面逆时针旋转的度数。该值应为90的倍数。默认值:0。

BC 数组(可选):一个数字数组,范围应介于 0.0 到 1.0 之间,用于指定小部件注释边框的颜色。阵列元件的数量决定了定义颜色的色彩空间:0 无颜色;透明 1 DeviceGray 3 DeviceRGB 4 DeviceCMYK

BG数组(可选):在0.0到1.0范围内的数字数组,指定小部件注释背景的颜色。数组元素的数量应决定颜色空间,如BC所述。

CA文本字符串(可选;仅按钮字段):小部件注释的正常标题,当它不与用户交互时将显示。与此表中列出的其他条目不同,这些条目仅适用于与按钮字段相关联的小部件注释(见12.7.4.2中的按钮,“按钮字段”),CA条目可用于任何类型的按钮字段,包括复选框(见12.74.2中的复选框,“按钮域”)和单选按钮(12.7.4.2的单选按钮,“按键域”)。

RC 文本字符串(可选,仅限按钮字段):小部件注释的翻转标题,当用户在不按鼠标按钮的情况下将光标滚动到其活动区域时,应显示该标题。

AC文本字符串(可选;仅限按钮字段):小部件注释的备用(向下)标题,当鼠标按钮在其活动区域内按下时应显示该标题。

当您要求填充颜色时,我假设您指的是背景颜色,这意味着您必须查看颜色空间的BC条目,以及实际颜色值的BG条目。

 类似资料:
  • 问题内容: 我在访问SimpleXML对象的部分时遇到问题。当我整个对象时,我得到正确的输出,而当我其余对象(嵌套标签)时,我得到正确的输出,但是当我遵循docs和时 ,我得到一个空对象,尽管事实是第一个清楚地表明,存在要输出的属性。 任何人都知道我在这里做错了/如何进行这项工作? 问题答案: 您可以通过在XML节点上调用attribute()函数来获取XML元素的属性。然后,您可以var_dum

  • 我正在使用Apache Jena查询DBpedia以获得特定主题的Wikipedia URL。 所以我使用 一个示例页面是http://dbpedia.org/page/chicago_cubs

  • 这是我的xml: 我为这个xml使用了JAXB和unMarshall,我可以得到描述和外部密钥。但是我不能得到有价值的属性名称。 > 这是我的java类: 组织JAVA 银行JAVA 如何获取属性名称和值?谢谢你

  • 包含一个变量,该变量包含我的所有属性注释。再一次不知道如何获得访问(黑客和谷歌)。叹息:\

  • 问题内容: 我有以下HTML代码: 我想获取href中包含的内容,即,我正在寻找一个命令,该命令将为href提供“ / search /?p = 2&q = move&mt = 1”值。 有人可以通过selenium中的相应命令和CSS定位器为我提供上述查询的帮助吗? 如果我有类似的东西: 如果要获取href的属性值,那么这两个属性中的文本将内容标记为“ 2”,那么我的CSS定位器synatx会是

  • 我有一个XMLPath对象,我想为一些节点取属性名。例如, 对于这个XML,什么是XMLPath表达式来获取的属性? 我可以通过以下内容获取md:EntityDescriptor的entityID: 但是对于位置属性,我想得到 我得到的输出是,其他什么都没有。