Java 如何区分复选框字段和一组单选按钮

Java 如何区分复选框字段和一组单选按钮,java,pdf,pdfbox,Java,Pdf,Pdfbox,当我使用pdfbox按名称检索PDF字段时 PDField field = acroForm.getField('my_field'); 我无法从字段或字段.getFieldType()的类型中确定该字段是单个复选框还是一组单选按钮,因为它们在两种情况下都是相同的 我能做到 boolean isCheckbox = field.getWidgets().size() == 1; 但这也不完全可靠,因为一个单选组可能只包含一个按钮。instanceof可用于确定字段的类型。如果是复选框,则类型

当我使用pdfbox按名称检索PDF字段时

PDField field = acroForm.getField('my_field');
我无法从
字段
字段.getFieldType()
的类型中确定该字段是单个复选框还是一组单选按钮,因为它们在两种情况下都是相同的

我能做到

boolean isCheckbox = field.getWidgets().size() == 1;

但这也不完全可靠,因为一个单选组可能只包含一个按钮。

instanceof
可用于确定字段的类型。如果是复选框,则类型将为
PDCheckbox
。如果字段是一组单选按钮,则类型应为
PDRadioCollection
。下面的代码将在PDFBox版本1.8.10上实现此功能。我发现AcroForms的类结构在PDFBox 2.0.0上发生了变化

if(field instanceof PDCheckbox){
    type="CheckBox";
}else if(field instanceof PDRadioCollection){
    type="Radio";
}
对于2.0.0版,根据找到的API文档,
PDButton
PDCheckbox
PDRadioButton
的超类。这将更改上面的代码,因为我们将检查PDCheckbox的
字段实例
和PDRadioButton的
字段实例


请注意,与此问题相关的还有一个问题。该错误似乎已经修复,因此请确保该修复在您的PDFBox版本中。

instanceof
可用于确定字段的类型。如果是复选框,则类型将为
PDCheckbox
。如果字段是一组单选按钮,则类型应为
PDRadioCollection
。下面的代码将在PDFBox版本1.8.10上实现此功能。我发现AcroForms的类结构在PDFBox 2.0.0上发生了变化

if(field instanceof PDCheckbox){
    type="CheckBox";
}else if(field instanceof PDRadioCollection){
    type="Radio";
}
对于2.0.0版,根据找到的API文档,
PDButton
PDCheckbox
PDRadioButton
的超类。这将更改上面的代码,因为我们将检查PDCheckbox的
字段实例
和PDRadioButton的
字段实例


请注意,与此问题相关的还有一个问题。看起来这个bug已经被修复了,所以请确保修复在您的PDFBox版本中。

这在旧版本的PDFBox中是正确的,但是由于版本1.8.10,单选按钮和复选框都有类型
PDCheckbox
,这是一个很好的观点。看起来2.0.0中确实有一些变化。看看我更新的答案,让我知道这是否适用于您,因为我还需要使用2.0.0进行测试。还要注意我看到的关于这个问题的错误报告,在底部提到。@Little Bobby Drop Tables,我更新的建议对你有用吗?我做了一些更新,将在PDFBox 2.0.0上运行。这在PDFBox的旧版本中是正确的,但由于版本1.8.10,单选按钮和复选框都有类型
PDCheckbox
,这是一个很好的观点。看起来2.0.0中确实有一些变化。看看我更新的答案,让我知道这是否适用于您,因为我还需要使用2.0.0进行测试。还要注意我看到的关于这个问题的错误报告,在底部提到。@Little Bobby Drop Tables,我更新的建议对你有用吗?我做了一些更新,可以在PDFBOX2.0.0上使用。