You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2021/10/17 18:08:42 UTC

svn commit: r1894329 - /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java

Author: tilman
Date: Sun Oct 17 18:08:42 2021
New Revision: 1894329

URL: http://svn.apache.org/viewvc?rev=1894329&view=rev
Log:
PDFBOX-4892: optimize, as suggested by valerybokov

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java?rev=1894329&r1=1894328&r2=1894329&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java Sun Oct 17 18:08:42 2021
@@ -42,6 +42,7 @@ import org.apache.pdfbox.pdmodel.font.PD
 import org.apache.pdfbox.pdmodel.font.PDType3Font;
 import org.apache.pdfbox.pdmodel.font.PDVectorFont;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
+import org.apache.pdfbox.pdmodel.interactive.action.PDAction;
 import org.apache.pdfbox.pdmodel.interactive.action.PDActionJavaScript;
 import org.apache.pdfbox.pdmodel.interactive.action.PDFormFieldAdditionalActions;
 import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
@@ -229,6 +230,8 @@ class AppearanceGeneratorHelper {
                 appearanceDict.setNormalAppearance(appearanceStream);
                 // TODO support appearances other than "normal"
             }
+            PDAppearanceCharacteristicsDictionary appearanceCharacteristics =
+                    widget.getAppearanceCharacteristics();
 
             /*
              * Adobe Acrobat always recreates the complete appearance stream if there is an
@@ -237,8 +240,9 @@ class AppearanceGeneratorHelper {
              * the entries.
              * 
              */
-            if (widget.getAppearanceCharacteristics() != null || appearanceStream.getContentStream().getLength() == 0) {
-                initializeAppearanceContent(widget, appearanceStream);
+            if (appearanceCharacteristics != null || appearanceStream.getContentStream().getLength() == 0)
+            {
+                initializeAppearanceContent(widget, appearanceCharacteristics, appearanceStream);
             }
 
             setAppearanceContent(widget, appearanceStream);
@@ -248,21 +252,26 @@ class AppearanceGeneratorHelper {
         }
     }
 
-    private String getFormattedValue(String apValue) {
+    private String getFormattedValue(String apValue)
+    {
         // format the field value for the appearance if there is scripting support and
         // the field
         // has a format event
         PDFormFieldAdditionalActions actions = field.getActions();
-
-        if (actions != null && actions.getF() != null) {
-            if (field.getAcroForm().getScriptingHandler() != null) {
+        if (actions == null)
+        {
+            return apValue;
+        }
+        PDAction actionF = actions.getF();
+        if (actionF != null)
+        {
+            if (field.getAcroForm().getScriptingHandler() != null)
+            {
                 ScriptingHandler scriptingHandler = field.getAcroForm().getScriptingHandler();
-                return scriptingHandler.format((PDActionJavaScript) field.getActions().getF(), apValue);
-            } else {
-                LOG.info(
-                        "Field contains a formatting action but no ScriptingHandler has been supplied - formatted value might be incorrect");
-                return apValue;
+                return scriptingHandler.format((PDActionJavaScript) actionF, apValue);
             }
+            LOG.info("Field contains a formatting action but no ScriptingHandler " +
+                     "has been supplied - formatted value might be incorrect");
         }
         return apValue;
     }
@@ -326,14 +335,18 @@ class AppearanceGeneratorHelper {
      * 
      * @param widget           the field widget
      * @param appearanceStream the appearance stream to be used
+     * @param appearanceCharacteristics the appearance characteristics dictionary from the widget or
+     * null
      * @throws IOException in case we can't write to the appearance stream
      */
-    private void initializeAppearanceContent(PDAnnotationWidget widget, PDAppearanceStream appearanceStream)
-            throws IOException {
+    private void initializeAppearanceContent(PDAnnotationWidget widget,
+            PDAppearanceCharacteristicsDictionary appearanceCharacteristics,
+            PDAppearanceStream appearanceStream)
+            throws IOException
+    {
         ByteArrayOutputStream output = new ByteArrayOutputStream();
         PDPageContentStream contents = new PDPageContentStream(field.getAcroForm().getDocument(), appearanceStream,
                 output);
-        PDAppearanceCharacteristicsDictionary appearanceCharacteristics = widget.getAppearanceCharacteristics();
 
         // TODO: support more entries like patterns, etc.
         if (appearanceCharacteristics != null) {
@@ -510,7 +523,7 @@ class AppearanceGeneratorHelper {
         if (field instanceof PDTextField && ((PDTextField) field).isMultiline()) {
             y = contentRect.getUpperRightY() - fontBoundingBoxAtSize;
         } else {
-            // Adobe shows the text 'shiftet up' in case the caps don't fit into the
+            // Adobe shows the text 'shifted up' in case the caps don't fit into the
             // clipping area
             if (fontCapAtSize > clipRect.getHeight()) {
                 y = clipRect.getLowerLeftY() + -fontDescentAtSize;