Hello Markus,

could you provide the test file again. I just now have the time to look
into that and the link is expired.

Kind regards,
Maruan

Am Dienstag, dem 28.04.2026 um 17:18 +0200 schrieb
[email protected]:
> Hi Markus:
> 
> from the 1.7 spec:
> 
> "... If present, the Opt entry shall be an array of text strings
> representing the export value of each annotation in the field. ..."
> 
> So it's present but does not contain any value but the spec has "...
> shall be ..." which means an empty array is not permitted here.
> 
> We are looking into handling it on the PDFBox side but I thought it
> might be good to check if the template creation can be enhanced.
> 
> BR
> Maruan  
> 
> 
> Am Dienstag, dem 28.04.2026 um 15:09 +0000 schrieb Markus Mensinger:
> > Hi Maruan,
> > 
> > the document is free to use. Acrobat Preflight found no syntax
> > errors. Which tool are you using to check it?
> > 
> > I'll find out which program was used to create the document and let
> > you know if I find out.
> > 
> > Kind regards
> > Markus
> > 
> > 
> > > -----Ursprüngliche Nachricht-----
> > > Von: [email protected] <[email protected]>
> > > Gesendet: Dienstag, 28. April 2026 12:45
> > > An: [email protected]
> > > Cc: Markus Mensinger <[email protected]>
> > > Betreff: Re: Setting checkbox value fails when field has empty
> > > /Opt
> > > array
> > > 
> > > Hello Markus,
> > > 
> > > we can look at making PDFBox handling this. OTOH the file itself
> > > is
> > > not spec
> > > compliant. Do you know what tool has generated this PDF?.
> > > 
> > > "... Each entry shall be a text string representing the on state
> > > of
> > > the corresponding
> > > widget annotation.". We can look at handling that gracefully.
> > > 
> > > When creating a ticket can we add the file to the ticket?
> > > 
> > > BTW: the workaround you documented looks fine for now
> > > 
> > > BR
> > > Maruan
> > > 
> > > 
> > > Am Dienstag, dem 28.04.2026 um 10:12 +0000 schrieb Markus
> > > Mensinger
> > > via
> > > users:
> > > > 
> > > > 
> > > > 
> > > > Hi PdfBox Team,
> > > > 
> > > > we have a problem with a customer document.
> > > > Download:
> > > > pdf-Symbol form_with_checkbox.pdf
> > > > Link valid until 08.05.
> > > > 
> > > > Here is a bug report generated with Claude Sonnet.
> > > > 
> > > > 
> > > > Component: PDFBox - Interactive Forms (AcroForm) Affects
> > > > Version:
> > > > 3.0.7
> > > > Type: Bug
> > > > 
> > > > 
> > > > SUMMARY
> > > > 
> > > > When a checkbox field in an AcroForm PDF contains an empty /Opt
> > > > array
> > > > (/Opt []) in its field dictionary, calling
> > > > PDCheckBox.setValue("Yes")
> > > > throws an IllegalArgumentException, even though "Yes" is a
> > > > perfectly
> > > > valid export value defined by the field's appearance states.
> > > > 
> > > > The same field can be checked and unchecked without any error
> > > > using
> > > > Adobe Acrobat products (Acrobat Reader, Acrobat Pro), which
> > > > treat
> > > > the
> > > > empty /Opt array as if it were absent. This confirms that the
> > > > PDF
> > > > is
> > > > valid and the issue is specific to PDFBox's validation logic.
> > > > 
> > > > 
> > > > ERROR MESSAGE
> > > > 
> > > > java.lang.IllegalArgumentException: value 'Yes' is not a valid
> > > > option
> > > > for the field Check_Info_Post_andere, valid values are: [] and
> > > > Off
> > > > 
> > > > 
> > > > ROOT CAUSE
> > > > 
> > > > The validation in PDCheckBox.setValue() checks the /Opt array
> > > > when it
> > > > is present.
> > > > If the array exists but is empty, all non-"Off" values are
> > > > rejected -
> > > > including the export value "Yes" that is defined in the field's
> > > > appearance dictionary (/AP).
> > > > The empty /Opt array should either be ignored or treated as
> > > > absent -
> > > > which is exactly what Adobe Acrobat does.
> > > > 
> > > > 
> > > > STEPS TO REPRODUCE
> > > > 
> > > > import org.apache.pdfbox.Loader;
> > > > import org.apache.pdfbox.cos.COSArray; import
> > > > org.apache.pdfbox.cos.COSName; import
> > > > org.apache.pdfbox.pdmodel.PDDocument;
> > > > import org.apache.pdfbox.pdmodel.interactive.form.PDCheckBox;
> > > > import org.apache.pdfbox.pdmodel.interactive.form.PDField;
> > > > 
> > > > import java.io.File;
> > > > 
> > > > public class CheckBoxBugDemo {
> > > > 
> > > >     public static void main(String[] args) {
> > > >         try (PDDocument doc = Loader.loadPDF(new
> > > > File("form_with_checkbox.pdf"))) {
> > > > 
> > > >             PDField field = doc.getDocumentCatalog()
> > > >                                .getAcroForm()
> > > >                               
> > > > .getField("Check_Info_Post_andere");
> > > > 
> > > >             System.out.println("Field type : " +
> > > > field.getFieldType());
> > > >             System.out.println("/Opt entry : " +
> > > >                 field.getCOSObject().getItem(COSName.OPT));  //
> > > > prints: COSArray{}
> > > > 
> > > >             // Workaround: manually remove the empty /Opt array
> > > > before
> > > > setting value
> > > >             COSArray opt = (COSArray)
> > > > field.getCOSObject().getDictionaryObject(COSName.OPT);
> > > >             if (opt != null && opt.size() == 0) {
> > > >                 field.getCOSObject().removeItem(COSName.OPT);
> > > >                 System.out.println("/Opt removed (was empty)");
> > > >             }
> > > > 
> > > >             // Without the workaround above, this line throws
> > > > IllegalArgumentException:
> > > >             // "value 'Yes' is not a valid option ... valid
> > > > values
> > > > are: [] and Off"
> > > >             ((PDCheckBox) field).setValue("Yes");
> > > > 
> > > >             System.out.println("Value set successfully: " +
> > > > ((PDCheckBox) field).getValue());
> > > > 
> > > >         } catch (Exception e) {
> > > >             e.printStackTrace();
> > > >         }
> > > >     }
> > > > }
> > > > 
> > > > 
> > > > EXPECTED BEHAVIOR
> > > > 
> > > > An empty /Opt array should be treated the same as a missing
> > > > /Opt
> > > > entry. The value "Yes" (or any export value present in the
> > > > field's
> > > > appearance states) should be accepted. This is consistent with
> > > > how
> > > > Adobe Acrobat Reader and Acrobat Pro handle this case.
> > > > 
> > > > 
> > > > ACTUAL BEHAVIOR
> > > > 
> > > > PDCheckBox.setValue("Yes") throws IllegalArgumentException
> > > > because the
> > > > empty /Opt array causes the valid-options check to return an
> > > > empty
> > > > list, which excludes "Yes".
> > > > 
> > > > 
> > > > WORKAROUND
> > > > 
> > > > Remove the empty /Opt entry from the field dictionary before
> > > > calling
> > > > setValue():
> > > > 
> > > >     COSArray opt = (COSArray)
> > > > field.getCOSObject().getDictionaryObject(COSName.OPT);
> > > >     if (opt != null && opt.size() == 0) {
> > > >         field.getCOSObject().removeItem(COSName.OPT);
> > > >     }
> > > >     ((PDCheckBox) field).setValue("Yes");
> > > > 
> > > > 
> > > > SUGGESTED FIX
> > > > 
> > > > In the PDFBox source, the method that validates allowed values
> > > > for a
> > > > checkbox should skip or ignore the /Opt array when it is
> > > > present
> > > > but
> > > > empty (size() == 0), bringing the behavior in line with Adobe
> > > > Acrobat.
> > > > 
> > > > 
> > > > Kind regards
> > > > Markus
> > > > 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to