pdfbox-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tilman Hausherr <THaush...@t-online.de>
Subject Re: RadioButton group with one radiobutton selected
Date Wed, 01 Feb 2017 19:10:26 GMT
Please see the code in the answer to this question:
https://stackoverflow.com/questions/41631119/radiobutton-display-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
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message