[ https://issues.apache.org/jira/browse/PDFBOX-2617?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14742060#comment-14742060 ]
Ilya Sazonov commented on PDFBOX-2617: -------------------------------------- Here's how I used to collect possible values for a group of checkboxes before 1.8.9 . To continue using this code I have to check if checkbox has kids and if it does - convert it to PDRadioButton public List<String> getValuesWithWorkaround(PDField group) { try { List<String> fieldValues = new ArrayList<String>(); List<COSObjectable> kids = group.getKids(); for (int i = 0;kids != null && i < kids.size(); i++) { COSObjectable kid = kids.get(i); if (kid instanceof PDCheckbox) { if (!fieldValues.contains(((PDCheckbox) kid).getOnValue())) { fieldValues.add(((PDCheckbox) kid).getOnValue()); } } } return fieldValues; } catch(IOException e) { throw new RuntimeException("trouble getting values"); } } And here's how I have to do it now private static final COSName KEY = COSName.getPDFName("AS"); private static final COSName OFF_VALUE = COSName.getPDFName("Off"); public List<String> getValues(PDCheckbox checbox) { try { List<String> fieldValues = new ArrayList<String>(); List<COSObjectable> kids = checbox.getKids(); List<PDAnnotationWidget> widgets = new ArrayList<PDAnnotationWidget>(); for (int i = 0;kids != null && i < kids.size(); i++) { COSObjectable kid = kids.get(i); if (kid instanceof PDAnnotationWidget) { widgets.add((PDAnnotationWidget) kid); } } for (PDAnnotationWidget widget : widgets) { COSDictionary ap = (COSDictionary) widget.getDictionary().getDictionaryObject(COSName.getPDFName("AP")); widget.getDictionary().setItem(KEY, COSName.getPDFName("Yes")); COSBase n = ap.getDictionaryObject(COSName.getPDFName("N")); //N can be a COSDictionary or a COSStream if( n instanceof COSDictionary ) { for( COSName key :((COSDictionary)n).keySet() ) { if( !key.equals( OFF_VALUE) ) { String onValue = key.getName(); if (!fieldValues.contains(onValue)) fieldValues.add(onValue); } } } } return fieldValues; } catch(IOException e) { throw new RuntimeException("trouble getting values"); } } Please note, that KEY and OFF_VALUE are originally static private fields for checkbox and I think this code should be a part of of PDCheckbox class. And PDCheckbox doesn't have such methods even in 2.0. It look like 2.0 treats checkbox as a single entity with single value, which is wrong. I have made a demo project with a class which has 2 methods and unit test. > Group of Button fields treated as a Radio Button group > ------------------------------------------------------ > > Key: PDFBOX-2617 > URL: https://issues.apache.org/jira/browse/PDFBOX-2617 > Project: PDFBox > Issue Type: Bug > Components: AcroForm > Affects Versions: 1.8.8, 2.0.0 > Environment: Windows 7, Eclipse, JRE 1.8.0_25 > Reporter: Gilad Denneboom > Assignee: Maruan Sahyoun > Priority: Minor > Fix For: 1.8.9, 2.0.0 > > Attachments: test.pdf > > > When creating a group of identical button fields PDFBox reads them as a group > of radio-button fields, with each widget as a check-box, which is incorrect. > The main field has the class PDRadioCollection and each kid is a PDCheckbox. > Run the following code on the attached file: > PDDocument doc = PDDocument.load( new File("test.pdf") ); > PDAcroForm form = doc.getDocumentCatalog().getAcroForm(); > List<PDField> fields = form.getFields(); > for (PDField f: fields) { > System.out.println("Name:" + f.getFullyQualifiedName()); > System.out.println("Type:" + f.getFieldType()); > System.out.println("Class:" + f.getClass()); > List<COSObjectable> kids = f.getKids(); > if (kids!=null) { > for (COSObjectable c : kids) { > System.out.println("Kid Class: " + c.getClass()); > > } > > } > } > The results are: > Name:Test > Type:Btn > Class:class org.apache.pdfbox.pdmodel.interactive.form.PDRadioCollection > Kid Class: class org.apache.pdfbox.pdmodel.interactive.form.PDCheckbox > Kid Class: class org.apache.pdfbox.pdmodel.interactive.form.PDCheckbox -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@pdfbox.apache.org For additional commands, e-mail: dev-h...@pdfbox.apache.org