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;