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;