Hi, > Am 22.01.2016 um 02:29 schrieb Adam Steen <ad...@rmt.com.au>: > > HI Tilman > > Thanks for your help, regarding "pdAcroForm.setNeedAppearances(true);", will > pdfbox have a default appearance in the future, so need appearances will not > be needed?
we will start working on that after 2.0 is out as we will also need that for PDF 2.0 support which mandates that the appearance stream is generated. BR Maruan > > I have a working solution to set default values and have acrobat render them. > It was pure fluke that I got this result, but wanted to post it so other will > know and to close out the solution. > > Code: > package pdfboxtesting; > > import java.io.FileInputStream; > import java.io.FileOutputStream; > import java.io.IOException; > import java.io.OutputStream; > import java.util.ArrayList; > import java.util.Arrays; > import java.util.List; > import org.apache.pdfbox.cos.COSDictionary; > import org.apache.pdfbox.cos.COSName; > import org.apache.pdfbox.cos.COSStream; > import org.apache.pdfbox.pdmodel.PDDocument; > import org.apache.pdfbox.pdmodel.PDPage; > import org.apache.pdfbox.pdmodel.PDPageContentStream; > import org.apache.pdfbox.pdmodel.PDResources; > import org.apache.pdfbox.pdmodel.common.PDRectangle; > import org.apache.pdfbox.pdmodel.font.PDFont; > import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont; > import org.apache.pdfbox.pdmodel.font.encoding.StandardEncoding; > import org.apache.pdfbox.pdmodel.graphics.color.PDColor; > import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB; > import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget; > import > org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceCharacteristicsDictionary; > import > org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceDictionary; > import org.apache.pdfbox.pdmodel.interactive.annotation.PDAppearanceEntry; > import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; > import org.apache.pdfbox.pdmodel.interactive.form.PDRadioButton; > > public class RadioButtonTest > { > private RadioButtonTest() { > } > > public static void main(String[] args) throws IOException > { > String fileName = "output/Test.pdf"; > String selectedValue = "a"; > String name = "Radio"; > > PDDocument document = new PDDocument(); > PDPage page = new PDPage(PDRectangle.A4); > document.addPage(page); > > PDAcroForm acroForm = new PDAcroForm(document); > acroForm.setNeedAppearances(true); > document.getDocumentCatalog().setAcroForm(acroForm); > > PDFont font = PDTrueTypeFont.load(document, new > FileInputStream("C:/Windows/Fonts/arial.ttf"), StandardEncoding.INSTANCE); > > PDResources res = new PDResources(); > COSName fontName = res.add(font); > acroForm.setDefaultResources(res); > acroForm.setDefaultAppearance('/' + fontName.getName() + " 0 Tf 0 g"); > > PDPageContentStream contents = new PDPageContentStream(document, page); > > List<String> options = Arrays.asList("a", "b", "c"); > PDRadioButton radioButton = new PDRadioButton(acroForm); > radioButton.setPartialName("RadioButton"); > List<PDAnnotationWidget> widgets = new ArrayList<>(); > for (int i = 0; i < options.size(); i++) > { > PDRadioButton subRadioButton = new PDRadioButton(acroForm); > subRadioButton.setPartialName(name); > > PDAnnotationWidget widget = subRadioButton.getWidgets().get(0); > > PDAppearanceCharacteristicsDictionary fieldAppearance = new > PDAppearanceCharacteristicsDictionary(new COSDictionary()); > fieldAppearance.setBorderColour(new PDColor(new float[]{0, 0, 0}, > PDDeviceRGB.INSTANCE)); > > widget.setRectangle(new PDRectangle(30, 800 - i * (21), 16, 16)); > widget.setAppearanceCharacteristics(fieldAppearance); > widget.setPage(page); > widget.getCOSObject().setItem(COSName.PARENT, radioButton); > widget.setAnnotationFlags(4); > > widget.setAppearanceState(options.get(i).equals(selectedValue) ? > selectedValue : "Off"); > widget.setHighlightingMode("N"); > > PDAppearanceDictionary ap = new PDAppearanceDictionary(); > > COSDictionary aeDict = new COSDictionary(); > > COSStream off = new COSStream(); > off.setItem(COSName.BBOX, new PDRectangle(0, 0, 16, 16)); > off.setItem(COSName.RESOURCES, res); > OutputStream osOff = off.createOutputStream(); > osOff.write(("q 0 g /" + fontName.getName() + " 16 Tf BT (O) Tj ET > Q").getBytes()); > osOff.write(("").getBytes()); > osOff.close(); > aeDict.setItem("Off", off); > > COSStream on = new COSStream(); > on.setItem(COSName.BBOX, new PDRectangle(0, 0, 16, 16)); > on.setItem(COSName.RESOURCES, res); > OutputStream osOn = on.createOutputStream(); > osOn.write(("q 0 g BT /" + fontName.getName() + " 16 Tf (X) Tj ET > Q").getBytes()); > osOn.write(("").getBytes()); > osOn.close(); > aeDict.setItem(options.get(i), on); > > PDAppearanceEntry ae = new PDAppearanceEntry(aeDict); > ap.setNormalAppearance(ae); > widget.setAppearance(ap); > > widgets.add(widget); > page.getAnnotations().add(widget); > } > radioButton.setWidgets(widgets); > System.out.println(radioButton.getOnValues()); > radioButton.setValue(selectedValue); > acroForm.getFields().add(radioButton); > > System.out.println(radioButton.getValue()); > > //acroForm.refreshAppearances(); // not implemented > contents.close(); > document.save(new FileOutputStream(fileName)); > > document.close(); > } > } > > Adam > > -----Original Message----- > From: Tilman Hausherr [mailto:thaush...@t-online.de] > Sent: Thursday, 21 January 2016 4:55 PM > To: users@pdfbox.apache.org > Subject: Re: How do you create a Radio Button Group with PDFBox 2.0? > > Am 21.01.2016 um 09:41 schrieb Adam Steen: >> I am now able to create a radio button group with >> "pdAcroForm.setNeedAppearances(true);", acrobat rendering things nicely for >> me. >> >> I am also able to create a group of checkboxes with default values also with >> "pdAcroForm.setNeedAppearances(true);", again acrobat rendering things >> nicely for me. >> >> My last hurdle is to create a radio button group with >> "pdAcroForm.setNeedAppearances(true);" and have a default value (or value) >> be displayed. >> >> Using your code provided earlier Tilman, I was able to set a value or a >> default value, but acrobat just does not want to render it. >> >> Is " pdAcroForm.setNeedAppearances(true);" a hack? Should I be rendering >> everything myself? > > Yes, it is a bit of a hack. Good applications should create their own > appearance streams. In PDF 2.0 it will be mandatory. > >> >> Adam >> >> -----Original Message----- >> From: Tilman Hausherr [mailto:thaush...@t-online.de] >> Sent: Thursday, 21 January 2016 4:29 PM >> To: users@pdfbox.apache.org >> Subject: Re: How do you create a Radio Button Group with PDFBox 2.0? >> >> Am 21.01.2016 um 06:51 schrieb Adam Steen: >>> It seems without building an appearance I am unable to set a default value? >> Indeed. I've been there too and looked through the code. >> >> Tilman >> >>> Does anyone have any ideas? >>> >>> Adam >>> >>> >>> -----Original Message----- >>> From: Adam Steen [mailto:ad...@rmt.com.au] >>> Sent: Thursday, 21 January 2016 8:26 AM >>> To: users@pdfbox.apache.org >>> Subject: RE: How do you create a Radio Button Group with PDFBox 2.0? >>> >>> Hi >>> >>> I did manage to get a Radio Group functioning, I have posted the code >>> to my question on stack overflow -> >>> http://stackoverflow.com/a/34895158/415681 >>> >>> The next problem will be getting a default value set. >>> >>> Adam >>> >>> -----Original Message----- >>> From: Tilman Hausherr [mailto:thaush...@t-online.de] >>> Sent: Wednesday, 20 January 2016 5:47 PM >>> To: users@pdfbox.apache.org >>> Subject: Re: How do you create a Radio Button Group with PDFBox 2.0? >>> >>> Here's the code I did yesterday: >>> http://justpaste.it/CreateRadioButtons >>> >>> The problem is that Adobe does things on its own even if the appearance >>> streams are set. This seems to be related to the appearance characteristics >>> (/MK). I haven't been able to teach it to "do nothing", or "do it all" when >>> I do nothing (having empty streams). >>> >>> Tilman >>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org >>> For additional commands, e-mail: users-h...@pdfbox.apache.org >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org >>> For additional commands, e-mail: users-h...@pdfbox.apache.org >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org >> For additional commands, e-mail: users-h...@pdfbox.apache.org >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org >> For additional commands, e-mail: users-h...@pdfbox.apache.org >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org > For additional commands, e-mail: users-h...@pdfbox.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org > For additional commands, e-mail: users-h...@pdfbox.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org For additional commands, e-mail: users-h...@pdfbox.apache.org