Hi Maruan,

I made this minor change to retrieve the NormalAppearance, and it worked. 
Thanks for basically providing the solution.



                PDRadioCollection radioCollection = (PDRadioCollection) field;

                PDCheckbox onCheckbox = (PDCheckbox) 
radioCollection.getKids().get(1);
                PDAppearanceDictionary apDictionary = 
onCheckbox.getWidget().getAppearance();
                
                // get the fields normal appearances i.e. the options to be 
selected
                Map<String,PDAppearanceStream> normalAppearances = 
apDictionary.getNormalAppearance();


-----Original Message-----
From: Wojack, Robert (USTP) [mailto:[email protected]] 
Sent: Monday, March 28, 2016 4:51 PM
To: [email protected]
Subject: RE: How to bind distinct OnValues for checkbox group?

Thanks Maruan!

However, when try to use the code, I get an exception in line 4th line:

Exception in thread "main" java.lang.ClassCastException: 
org.apache.pdfbox.pdmodel.interactive.form.PDCheckbox cannot be cast to 
org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget

As a reminder, I'm using PDFBox 1.8.8 if that matters. In the meantime, I'll 
play around with what you provided and see if I can get it to work.



-----Original Message-----
From: Maruan Sahyoun [mailto:[email protected]]
Sent: Monday, March 28, 2016 3:30 PM
To: [email protected]
Subject: Re: How to bind distinct OnValues for checkbox group?

Hi,

here you go.


                PDDocument document = PDDocument.load("form_b122a-2.pdf");
                PDAcroForm form = document.getDocumentCatalog().getAcroForm();
                PDField field = form.getField("CheckBox16");
                PDAnnotationWidget widget = (PDAnnotationWidget) 
field.getKids().get(1);
                
                // get the fields normal appearances i.e. the options to be 
selected
                Map<String,PDAppearanceStream> normalAppearances = 
widget.getAppearance().getNormalAppearance();
                
                // Print out the current entries. There are two options
                // On and Off
                System.out.println(normalAppearances);

                // Add a new entry with the desired value copying over the 
                // appearance stream of the to be 'renamed' entry 
                normalAppearances.put("Yes",normalAppearances.get("On"));
                normalAppearances.remove("On");

                // Print out the new entries. There are two options
                // Yes and Off
                System.out.println(normalAppearances);

                document.save("form_b122a-2-pdfbox.pdf");
                document.close();


BR
Maruan

> Am 28.03.2016 um 15:14 schrieb Wojack, Robert (USTP) 
> <[email protected]>:
> 
> Yes. It is a publicly available PDF:
> 
>       http://www.uscourts.gov/file/18792/download
> 
> 
> Go to the last page (pg9) and click the No/Yes checkboxes for line 43. You 
> will see the behavior where each box is checked or unchecked regardless of 
> which one is actually clicked.
> 
> Thanks in advance for taking a look at this.
> 
> 
> 
>       
> 
> -----Original Message-----
> From: Maruan Sahyoun [mailto:[email protected]]
> Sent: Saturday, March 26, 2016 7:58 AM
> To: [email protected]
> Subject: Re: How to bind distinct OnValues for checkbox group?
> 
> Hi,
> 
> is it possible to share the PDF?
> 
> BR
> Maruan
> 
>> Am 25.03.2016 um 19:02 schrieb Wojack, Robert (USTP) 
>> <[email protected]>:
>> 
>> They are two distinct checkboxes within a radio collection. The problem is 
>> they both have their onValue set to "On". I need to set the onValue for one 
>> of them to something else ("Off").
>> 
>> Your code has given me some ideas, but so far, I haven't been able to 
>> adequately solve it.
>> 
>> Thanks,
>> 
>> Bob
>> 
>> -----Original Message-----
>> From: Maruan Sahyoun [mailto:[email protected]]
>> Sent: Thursday, March 24, 2016 6:16 AM
>> To: [email protected]
>> Subject: Re: How to bind distinct OnValues for checkbox group?
>> 
>> Hi,
>> 
>> are you sure that these are two distinct fields? If yes, you can set 
>> the On value - using 1.8.x - with
>> 
>> PDAnnotationWidget widget = field.getWidget() PDAppearanceDictionary 
>> apDictionary = widget.getAppearance(); PDAppearanceEntry 
>> normalAppearance = apDictionary.getNormalAppearance();
>> 
>> // to get the current values
>> Map<String,PDAppearanceStream> appearanceMap = 
>> apDictionary.getNormalAppearance();
>> 
>> // to set the values
>> apDictionary.setNormalAppearance(Map<String,PDAppearanceStream>);
>> 
>> 
>> Haven't tested that code but should give you an idea.
>> 
>> BR
>> Maruan
>> 
>> 
>> 
>>> Am 23.03.2016 um 16:51 schrieb Wojack, Robert (USTP) 
>>> <[email protected]>:
>>> 
>>> We have a client that provides us with interactive PDF forms for our app to 
>>> populate fields with user data. The problem is the client sometimes 
>>> provides us forms with typos and mistakes and is not responsive about 
>>> fixing them.
>>> 
>>> In this case, we are given an interactive PDF form that has a pair of 
>>> Yes/No checkboxes. Unfortunately, when creating the PDF, the client bound 
>>> both checkboxes to the same "On" value. As a result, when a user checks a 
>>> box, both of them get checked (additionally, when a user unchecks a box, 
>>> they both become unchecked).
>>> 
>>> I can use PDFBox to open the file, find the PDCheckbox object in question 
>>> and list their On and Off values, but I can't figure out how to update the 
>>> bindings to distinct values. Is it possible to do this in PDFBox? If so, 
>>> can someone please provide some guidance?
>>> 
>>> We are using PDFBox 1.8.8. We are not positioned to upgrade to 2.0.0.
>>> 
>>> Thanks
>>> 
>>> 
>>> Bob Wojack
>>> CSRA International, Inc.
>>> Onsite Contractor for the Department of Justice Senior Tech Lead US 
>>> Trustee Program
>>> Onsite Email Address:     
>>> [email protected]<mailto:[email protected]>
>>> Onsite Phone Number:    TBD
>>> Cell#:                              (301)910-9975
>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> 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]
> 


---------------------------------------------------------------------
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