Details
-
Improvement
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.0.16
-
None
Description
The code to set the size of multiline sets it to 12 when the font size is 0 in /DA. However Adobe does this differently. Attached: file generated by the code below, and file after adding a "d" in the field with Adobe Reader.
The code to generate the file:
try (PDDocument document = new PDDocument()) { PDPage page = new PDPage(PDRectangle.A4); document.addPage(page); // Adobe Acrobat uses Helvetica as a default font and // stores that under the name '/Helv' in the resources dictionary PDFont font = PDType1Font.HELVETICA; PDResources resources = new PDResources(); resources.put(COSName.getPDFName("Helv"), font); // Add a new AcroForm and add that to the document PDAcroForm acroForm = new PDAcroForm(document); document.getDocumentCatalog().setAcroForm(acroForm); // Add and set the resources and default appearance at the form level acroForm.setDefaultResources(resources); // Acrobat sets the font size on the form level to be // auto sized as default. This is done by setting the font size to '0' String defaultAppearanceString = "/Helv 0 Tf 0 g"; acroForm.setDefaultAppearance(defaultAppearanceString); // Add a form field to the form. PDTextField textBox = new PDTextField(acroForm); textBox.setPartialName("SampleField"); // Acrobat sets the font size to 12 as default // This is done by setting the font size to '12' on the // field level. // The text color is set to blue in this example. // To use black, replace "0 0 1 rg" with "0 0 0 rg" or "0 g". defaultAppearanceString = "/Helv 0 Tf 0 0 1 rg"; textBox.setDefaultAppearance(defaultAppearanceString); textBox.setMultiline(true); // add the field to the acroform acroForm.getFields().add(textBox); // Specify the widget annotation associated with the field PDAnnotationWidget widget = textBox.getWidgets().get(0); PDRectangle rect = new PDRectangle(50, 750, 200, 15); widget.setRectangle(rect); widget.setPage(page); // set green border and yellow background // if you prefer defaults, just delete this code block PDAppearanceCharacteristicsDictionary fieldAppearance = new PDAppearanceCharacteristicsDictionary(new COSDictionary()); fieldAppearance.setBorderColour(new PDColor(new float[]{0,1,0}, PDDeviceRGB.INSTANCE)); fieldAppearance.setBackground(new PDColor(new float[]{1,1,0}, PDDeviceRGB.INSTANCE)); widget.setAppearanceCharacteristics(fieldAppearance); // make sure the widget annotation is visible on screen and paper widget.setPrinted(true); // Add the widget annotation to the page page.getAnnotations().add(widget); // set the field value textBox.setValue("Sample field"); document.save("target/SimpleMultilineForm.pdf"); }
Attachments
Attachments
Issue Links
- relates to
-
PDFBOX-4568 Field text poorly vertically aligned
- Closed