Author: tilman
Date: Tue Nov 25 16:46:24 2025
New Revision: 1929995

Log:
PDFBOX-5660: optimize, as suggested by Valery Bokov; closes #346

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
==============================================================================
--- 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
  Tue Nov 25 16:35:15 2025        (r1929994)
+++ 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/AppearanceGeneratorHelper.java
  Tue Nov 25 16:46:24 2025        (r1929995)
@@ -24,6 +24,7 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Pattern;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.fontbox.util.BoundingBox;
@@ -65,6 +66,8 @@ class AppearanceGeneratorHelper {
     private static final Operator BMC = Operator.getOperator("BMC");
     private static final Operator EMC = Operator.getOperator("EMC");
 
+    private static final Pattern PATTERN = 
Pattern.compile("\\u000D\\u000A|[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029]");
+
     private final PDVariableText field;
 
     private PDDefaultAppearanceString defaultAppearance;
@@ -184,8 +187,9 @@ class AppearanceGeneratorHelper {
         // set programmatically and Reader is forced to generate the appearance
         // using PDAcroForm.setNeedAppearances
         // see PDFBOX-3911
-        if (field instanceof PDTextField && !((PDTextField) 
field).isMultiline()) {
-            value = 
value.replaceAll("\\u000D\\u000A|[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029]",
 " ");
+        if (field instanceof PDTextField && !((PDTextField) 
field).isMultiline())
+        {
+            value = PATTERN.matcher(value).replaceAll(" ");
         }
 
         for (PDAnnotationWidget widget : field.getWidgets()) {

Reply via email to