pdfbox-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bharat Bhatt <bharatbh...@gmail.com>
Subject Re: RadioButton group with one radiobutton selected
Date Thu, 02 Feb 2017 19:27:37 GMT
Hi Tilman,


Its very difficult to change the appearance string. I required different
size and it will be passed as method variable. Where to change in strings?

One more query:

Before creation radio button I created some TextField and saved the default
PDAcroForm at the instance level variable.
I required same default behavior for other Textfield or any other control
which will be created after the radio button.

When I am applying back the old PDAcroForm I am not getting same appearance.

How to set the old PDAcroForm behavior with default or old appreance?



Thanks,
Bharat


On Fri, Feb 3, 2017 at 12:20 AM, Tilman Hausherr <THausherr@t-online.de>
wrote:

> Am 02.02.2017 um 19:22 schrieb Bharat Bhatt:
>
>> Hi Tilman,
>>
>> Whatever code I send yesterday not worked with change
>> |widget.setAppearanceState(i
>> ==on
>>      ?options.get(i):"Off");|
>>
>> But I refer the code https://stackoverflow.com/ques
>> tions/41631119/radiobutton-display-problems-with-pdfbox and tried the
>> |widget.setAppearanceState(i
>> ==on
>>      ?options.get(i):"Off");|  as I attached in previous mail.
>> and thats work fine. But issue coming when another radio button is
>> clicked.
>>
>> Please suggest me the better approach for radiobutton with selected value.
>>
>
> That is because you didn't use all the code from the answer in
>
> https://stackoverflow.com/questions/41631119/radiobutton-
> display-problems-with-pdfbox
>
> In the code below, specifically this line
>
>                 COSStream onStream = new COSStream();
>                 aeDict.setItem(options.get(i), onStream);
>                 aeDict.setItem(COSName.Off.getName(), onStream);
>
> will not work. You can't use the same (empty!) appearance stream for on
> and off.
>
> If you can't use the code from the answer because something is different,
> e.g. you need a different size or whatever, then please tell what the
> difference is and I'll do my best to help you.
>
> Tilman
>
>
>
>
>
>
>> Thanks,
>> Bharat
>>
>> On Thu, Feb 2, 2017 at 10:57 PM, Tilman Hausherr <THausherr@t-online.de>
>> wrote:
>>
>> Hi,
>>>
>>> The code I mentioned yesterday works perfectly. You use something that
>>> has
>>> only parts of it and now it no longer works. For example you deleted the
>>> appearance streams, but didn't reactivate setNeedAppearances(true); . So
>>> it
>>> will show nothing.
>>> Then you have an empty and identical stream for selected and off. That
>>> can't be good. There may be other problems.
>>>
>>> Tilman
>>>
>>>
>>> Am 02.02.2017 um 18:10 schrieb Bharat Bhatt:
>>>
>>> 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 <bharatbhatt@gmail.com
>>>> <mailto:bharatbhatt@gmail.com>> 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
>>>>      <THausherr@t-online.de <mailto:THausherr@t-online.de>> wrote:
>>>>
>>>>          Please see the code in the answer to this question:
>>>>          https://stackoverflow.com/questions/41631119/radiobutton-
>>>> display-problems-with-pdfbox
>>>>          <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("Ra
>>>> dioButtonParent");
>>>>                           radioButton.setExportValues(options);
>>>>                                      radioButton.getCOSObject().set
>>>> Name(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.ge
>>>>              <http://COSName.Off.ge>tName(), 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: users-unsubscribe@pdfbox.apache.org
>>>> For additional commands, e-mail: users-help@pdfbox.apache.org
>>>>
>>>>
>>>
>>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@pdfbox.apache.org
> For additional commands, e-mail: users-help@pdfbox.apache.org
>
>

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