获取checkbox pdfbox的导出值

c90pui9n  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(426)

在pdfbox中检索复选框的导出值时遇到问题。我正在使用pdfbox v2.0.21。我需要导出值,因为我需要知道每个复选框字段在另一个应用程序中Map到什么。
复选框具有相同的部分名称,但导出值不同。这里是一个pdf示例。
如果我在字段上调用“getexportvalues”,我将获得复选框组[“a”,“b”]的所有可用复选框导出选项。例如 ((PDCheckBox) field).getExportValues(); //returns ["a","b"] 有没有办法确定哪个出口值属于当前字段?
如果我调用“getonvalue”,它将返回“0”(它对所有复选框字段都这样做)。例如 onValue = ((PDCheckBox) field).getOnValue(); //returns "0" 不管我在看哪个字段,它都返回“0”。
如果我打电话 field.check() 它抛出“java.lang.illegalargumentexception”异常(我认为这是因为它使用的是“0”而不是“a”或“b”)。
如果我打电话 field.setValue() 无论是“a”还是“b”,他们都能在这个领域取得成功,所以还不清楚还有什么其他的选择可以尝试。我尝试了这种方法,希望能够确定哪些出口值属于我当前查询的字段。
请让我知道,如果你对上述任何见解。
更新:在进一步调试之后,看起来每个字段都有2个与之相关联的小部件(因此,如果field checkbox具有相同的名称,那么它就有多个小部件)。在pdf中添加额外的复选框会产生与每个字段相关联的3个小部件。如果我使用 field.getWidgets().get(1).dictionary.getCOSObject(COSName.AP).getDictionaryObject(COSName.N) 得到不为“off”的键(如这里所述),然后返回“1”,我假设它是widgets导出值(来自getexportvalues)的索引,但是我没有办法确定哪个widget属于我当前正在查看的字段。
谢谢,罗伯

xu3bshqb

xu3bshqb1#

在进一步调试时,我发现如果checkbox字段共享相同的值,那么只有1个adobe字段与之关联。
为了得到导出值,我循环遍历每个字段的小部件,并使用下面的代码得到每个小部件的“onvalue”。

PDAppearanceDictionary apDictionary = widget.getAppearance();
    String onValue = "";
    if(apDictionary!=null)

    PDAppearanceEntry normalAppearance = apDictionary.getNormalAppearance();
    if (normalAppearance != null) {
        Set<COSName> entries = normalAppearance.getSubDictionary().keySet();
        Iterator var6 = entries.iterator();

        while (var6.hasNext()) {
            COSName entry = (COSName) var6.next();
            if (COSName.Off.compareTo(entry) != 0) {
                onValue = entry.getName();
            }
        }
    }

   List<String> exportValues = ((PDCheckBox) field).getExportValues();

   String exportValue = exportValues.get(Integer.parseInt(onValue));

相关问题