Hi Maruan,

sorry for the late response (as always). The bug/behaviour is fixed in the 
actual 3.0.8-SNAPSHOT. Thank you for the great work again.

Kind regards
Markus

> -----Ursprüngliche Nachricht-----
> Von: [email protected] <[email protected]>
> Gesendet: Dienstag, 2. Juni 2026 13:02
> An: [email protected]
> Cc: Markus Mensinger <[email protected]>
> Betreff: Re: Setting checkbox value fails when field has empty /Opt array
> 
> Hi Markus,
> 
> did you find the time to take a look?
> 
> BR
> Maruan
> 
> Am Donnerstag, dem 28.05.2026 um 11:43 +0200 schrieb
> [email protected]:
> > Hello Markus,
> >
> > an new snapshot build is available at
> > https://repository.apache.org/content/groups/snapshots/org/apache/pdfb
> > ox/pdfbox-app/3.0.8-SNAPSHOT/
> > to test.
> >
> > BR
> > Maruan
> >
> >
> > Am Donnerstag, dem 28.05.2026 um 09:18 +0200 schrieb
> > [email protected]:
> > > Hello Markus,
> > >
> > > I've created PDFBOX-6207 for that.
> > >
> > > BR
> > > Maruan
> > >
> > > Am Dienstag, dem 26.05.2026 um 10:50 +0000 schrieb Markus Mensinger
> > > via
> > > users:
> > > > Hi Maruan,
> > > >
> > > > here is the new link. It's valid for 10 Days. The document is free
> > > > to use.
> > > >
> > > > https://signotecgmbh-my.sharepoint.com/:b:/g/personal/markus_mensi
> > > >
> nger_signotec_de/IQA1G3tlspKkS5vU_AqOffDkAfs4fLjHS72BB2hRGA2wmd4?e
> > > > =65ka16
> > > >
> > > > Kind regards
> > > > Markus
> > > >
> > > > > -----Ursprüngliche Nachricht-----
> > > > > Von: [email protected] <[email protected]>
> > > > > Gesendet: Mittwoch, 20. Mai 2026 15:58
> > > > > An: [email protected]; Markus Mensinger
> > > > > <[email protected]>
> > > > > Betreff: Re: Setting checkbox value fails when field has empty
> > > > > /Opt array
> > > > >
> > > > > 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]
> > >
> > > -------------------------------------------------------------------
> > > --
> > > 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