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:38 UTC
svn commit: r1894328 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
Author: tilman
Date: Sun Oct 17 18:08:38 2021
New Revision: 1894328
URL: http://svn.apache.org/viewvc?rev=1894328&view=rev
Log:
PDFBOX-4892: optimize, as suggested by valerybokov
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java?rev=1894328&r1=1894327&r2=1894328&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java Sun Oct 17 18:08:38 2021
@@ -41,6 +41,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;
@@ -242,6 +243,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 appearance characteristics
@@ -249,9 +252,9 @@ class AppearanceGeneratorHelper
* stream from the entries.
*
*/
- if (widget.getAppearanceCharacteristics() != null || appearanceStream.getContentStream().getLength() == 0)
+ if (appearanceCharacteristics != null || appearanceStream.getContentStream().getLength() == 0)
{
- initializeAppearanceContent(widget, appearanceStream);
+ initializeAppearanceContent(widget, appearanceCharacteristics, appearanceStream);
}
setAppearanceContent(widget, appearanceStream);
@@ -267,19 +270,20 @@ class AppearanceGeneratorHelper
// 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 (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;
}
@@ -351,17 +355,18 @@ class AppearanceGeneratorHelper
* around the widget
*
* @param widget the field widget
+ * @param appearanceCharacteristics the appearance characteristics dictionary from the widget or
+ * null
* @param appearanceStream the appearance stream to be used
* @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
{
try (ByteArrayOutputStream output = new ByteArrayOutputStream();
- PDAppearanceContentStream contents = new PDAppearanceContentStream(appearanceStream, output))
+ PDAppearanceContentStream contents = new PDAppearanceContentStream(appearanceStream, output))
{
-
- PDAppearanceCharacteristicsDictionary appearanceCharacteristics = widget.getAppearanceCharacteristics();
-
// TODO: support more entries like patterns, etc.
if (appearanceCharacteristics != null)
{
@@ -548,7 +553,7 @@ class AppearanceGeneratorHelper
}
else
{
- // Adobe shows the text 'shiftet up' in case the caps don't fit into the clipping area
+ // 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;