Uploaded image for project: 'PDFBox'
  1. PDFBox
  2. PDFBOX-4594

Multiline field text with auto font sizing should be size adjusted

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 2.0.16
    • 2.0.21, 3.0.0 PDFBox
    • AcroForm
    • 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

        1. SimpleMultilineForm.pdf
          2 kB
          Tilman Hausherr
        2. SimpleMultilineForm-ADOBE.pdf
          5 kB
          Tilman Hausherr
        3. SimpleMultilineForm-pdfbox.pdf
          2 kB
          Maruan Sahyoun

        Issue Links

          Activity

            People

              msahyoun Maruan Sahyoun
              tilman Tilman Hausherr
              Votes:
              1 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: