Hi Tilman,
I am facing another issue in RadioButton. when click on unselected radio
button appearance of radio will disappear.
Sample PDF is attached and sample code I am using as follow:
try
{
PDDocument document = new PDDocument();
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
PDAcroForm acroForm = new PDAcroForm(document);
// not needed, we have appearance streams
//acroForm.setNeedAppearances(true);
acroForm.setXFA(null);
document.getDocumentCatalog().setAcroForm(acroForm);
PDFont font = PDType1Font.HELVETICA;
PDResources res = new PDResources();
COSName fontName = res.add(font);
acroForm.setDefaultResources(res);
acroForm.setDefaultAppearance('/' + fontName.getName() + " 10
Tf 0 g");
PDPageContentStream contents = new
PDPageContentStream(document, page);
List<String> options = Arrays.asList("a", "b", "c");
PDRadioButton radioButton = new PDRadioButton(acroForm);
radioButton.setPartialName("RadioButtonParent");
// removed per advice of Maruan Sahyoun, setValue didn't work
anymore
//radioButton.setExportValues(options);
radioButton.getCOSObject().setName(COSName.DV, options.get(1));
radioButton.setFieldFlags(49152);
int on = 1;
List<PDAnnotationWidget> widgets = new ArrayList<>();
for (int i = 0; i < options.size(); i++)
{
PDAppearanceCharacteristicsDictionary fieldAppearance =
new PDAppearanceCharacteristicsDictionary(new
COSDictionary());
fieldAppearance.setBorderColour(new PDColor(new float[] {
0, 0, 0 }, PDDeviceRGB.INSTANCE));
PDAnnotationWidget widget = new PDAnnotationWidget();
widget.setRectangle(new PDRectangle(30, 811 - i * (21), 16,
16));
widget.setAppearanceCharacteristics(fieldAppearance);
widget.setAnnotationFlags(4);
widget.setPage(page);
PDAppearanceDictionary appearance = widget.getAppearance();
if (appearance == null)
{
appearance = new PDAppearanceDictionary();
}
COSDictionary aeDict = new COSDictionary();
COSStream onStream = new COSStream();
aeDict.setItem(options.get(i), onStream);
aeDict.setItem(COSName.Off.getName(), onStream);
PDAppearanceEntry ae = new PDAppearanceEntry(aeDict);
appearance.setNormalAppearance(ae);
widget.setAppearance(appearance);
widgets.add(widget);
page.getAnnotations().add(widget);
widget.setAppearanceState(i == on? options.get(i): "Off");
widgets.add(widget);
page.getAnnotations().add(widget);
contents.beginText();
contents.setFont(font, 10);
contents.newLineAtOffset(56, 811 - i * (21) + 4);
contents.showText(options.get(i));
contents.endText();
}
radioButton.setWidgets(widgets);
acroForm.getFields().add(radioButton);
contents.close();
try (FileOutputStream output = new
FileOutputStream("D:\\test22.pdf"))
{
document.save(output);
}
document.close();
}
catch (IOException e)
{
e.printStackTrace();
}
Please help me resolve this issue. Is any other configuration or appearance
I have to add.
Thanks,
Bharat
On Thu, Feb 2, 2017 at 11:44 AM, Bharat Bhatt <[email protected]> wrote:
> Thank a lot for details.
>
> I tried with |widget.setAppearanceState(i ==on ?options.get(i):"Off");|
> and its works fine for me.
>
> Thanks,
> Bharat
>
>
>
> On Thu, Feb 2, 2017 at 12:40 AM, Tilman Hausherr <[email protected]>
> wrote:
>
>> Please see the code in the answer to this question:
>> https://stackoverflow.com/questions/41631119/radiobutton-dis
>> play-problems-with-pdfbox
>>
>> To select a button, the appropriate line there is
>>
>> |widget.setAppearanceState(i ==on ?options.get(i):"Off");|
>>
>>
>> setValue should also work, but you'd have to delete this line
>>
>> radioButton.setExportValues(options);
>>
>>
>> because there's a bug related to that.
>>
>> Your code below seems to be based on an older answer of mine (it has "new
>> PDRadioButton" twice), which wasn't really good.
>>
>> Another strategy would be that you open your created file with
>> PDFDebugger, then do the same after selecting something in Adobe Reader and
>> saving it.
>>
>> Tilman
>>
>>
>> Am 01.02.2017 um 19:22 schrieb Bharat Bhatt:
>>
>>> Hi,
>>>
>>> I used PDRadioButton to create group of radio button. I am trying to
>>> select
>>> the one radio button by default but radio button is not appearing as
>>> selected.
>>> Code example as follows:
>>> try
>>> {
>>> PDDocument document = new PDDocument();
>>> PDPage page = new PDPage(PDRectangle.A4);
>>>
>>> document.addPage(page);
>>>
>>> PDAcroForm acroForm = new PDAcroForm(document);
>>> acroForm.setNeedAppearances(true);
>>> acroForm.setXFA(null);
>>> document.getDocumentCatalog().setAcroForm(acroForm);
>>>
>>> PDFont font = PDType1Font.HELVETICA;
>>>
>>> PDResources res = new PDResources();
>>> COSName fontName = res.add(font);
>>> acroForm.setDefaultResources(res);
>>> acroForm.setDefaultAppearance('/' + fontName.getName() + "
>>> 10
>>> Tf 0 g");
>>>
>>> PDPageContentStream contents = new
>>> PDPageContentStream(document, page);
>>>
>>> List<String> options = Arrays.asList("a", "b", "c");
>>> PDRadioButton radioButton = new PDRadioButton(acroForm);
>>> radioButton.setPartialName("RadioButtonParent");
>>> radioButton.setExportValues(options);
>>> radioButton.getCOSObject().setName(COSName.DV,
>>> options.get(1));
>>>
>>> List<PDAnnotationWidget> widgets = new ArrayList<>();
>>> for (int i = 0; i < options.size(); i++)
>>> {
>>> PDRadioButton subRadioButtons = new
>>> PDRadioButton(acroForm);
>>> subRadioButtons.setPartialName("RadioButton");
>>>
>>> PDAppearanceCharacteristicsDictionary fieldAppearance =
>>> new PDAppearanceCharacteristicsDictionary(new
>>> COSDictionary());
>>> fieldAppearance.setBorderColour(new PDColor(new
>>> float[] {
>>> 0, 0, 0 }, PDDeviceRGB.INSTANCE));
>>>
>>> PDAnnotationWidget widget =
>>> subRadioButtons.getWidgets().get(0);
>>> widget.setRectangle(new PDRectangle(30, 811 - i * (21),
>>> 16,
>>> 16));
>>> widget.setAppearanceCharacteristics(fieldAppearance);
>>>
>>> PDAppearanceDictionary appearance =
>>> widget.getAppearance();
>>> if (appearance == null)
>>> {
>>> appearance = new PDAppearanceDictionary();
>>> }
>>>
>>> COSDictionary aeDict = new COSDictionary();
>>> COSStream on = new COSStream();
>>> aeDict.setItem(options.get(i), on);
>>>
>>> String value = null;
>>> if (options != null)
>>> {
>>> value = options.get(i);
>>> if (!"b".equalsIgnoreCase(value))
>>> {
>>> aeDict.setItem(COSName.Off.getName(), on);
>>> }
>>> }
>>>
>>> PDAppearanceEntry ae = new PDAppearanceEntry(aeDict);
>>> appearance.setNormalAppearance(ae);
>>> widget.setAppearance(appearance);
>>> widgets.add(widget);
>>> page.getAnnotations().add(widget);
>>>
>>> contents.beginText();
>>> contents.setFont(font, 10);
>>> contents.newLineAtOffset(56, 811 - i * (21) + 4);
>>> contents.showText(options.get(i));
>>> contents.endText();
>>> }
>>> radioButton.setWidgets(widgets);
>>> acroForm.getFields().add(radioButton);
>>>
>>> contents.close();
>>> try (FileOutputStream output = new
>>> FileOutputStream("D:\\RadioTest.pdf"))
>>> {
>>> document.save(output);
>>> }
>>> document.close();
>>> }
>>> catch (IOException e)
>>> {
>>> e.printStackTrace();
>>> }
>>>
>>> How to make radio button "b" as selected?
>>>
>>> Thanks,
>>> Bharat
>>>
>>>
>>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]