【问题标题】:get export value of checkbox pdfbox获取复选框pdfbox的导出值
【发布时间】:2020-11-23 10:03:00
【问题描述】:

我在检索 PDFBox 中复选框的导出值时遇到问题。我正在使用 PDFBox v2.0.21。我需要导出值,因为我需要知道每个复选框字段在另一个应用程序中映射到什么。

复选框的部分名称相同,但导出值不同。一个示例 pdf 是 here

如果我在该字段上调用“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”。

如果我用“a”或“b”调用field.setValue(),它们都会在该领域取得成功,因此尚不清楚要尝试哪些其他选项。我曾尝试过这种方法,希望能够确定我当前正在查询的字段属于哪个导出值。

如果您对上述内容有任何见解,请告诉我。

更新:经过进一步调试,看起来每个字段都有 2 个与之关联的小部件(因此,如果字段复选框具有相同的名称,则它具有多个小部件)。在 pdf 中添加额外的复选框会产生与每个字段关联的 3 个小部件。如果我使用field.getWidgets().get(1).dictionary.getCOSObject(COSName.AP).getDictionaryObject(COSName.N) 并获得不是“关闭”的键(如here 所述),那么它返回“1”,我假设是该小部件导出值的索引(来自getExportValues) 但是我没有办法确定哪个小部件属于我当前正在查看的字段。

谢谢 抢

【问题讨论】:

    标签: java pdfbox


    【解决方案1】:

    在进一步调试中,我发现如果复选框字段共享相同的值,则只有 1 个 Adob​​e 字段与之关联。

    为了获取导出值,我循环遍历每个字段的小部件,并使用此代码获取每个小部件的“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)); 
    

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多