Author: tilman
Date: Tue Apr 15 03:22:32 2025
New Revision: 1925086

URL: http://svn.apache.org/viewvc?rev=1925086&view=rev
Log:
PDFBOX-5987: preprocess DIV commands

Modified:
    
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java

Modified: 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java?rev=1925086&r1=1925085&r2=1925086&view=diff
==============================================================================
--- 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java 
(original)
+++ 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/Type2CharString.java 
Tue Apr 15 03:22:32 2025
@@ -76,7 +76,33 @@ public class Type2CharString extends Typ
     {
         pathCount = 0;
         List<Number> numbers = new ArrayList<>();
-        sequence.forEach(obj -> {
+
+        List<Object> newSequence = new ArrayList<>(sequence.size());
+        for (int i = 0; i < sequence.size(); ++i)
+        {
+            if (sequence.get(i) == CharStringCommand.DIV && i >= 2)
+            {
+                Object num = sequence.get(i - 2);
+                Object den = sequence.get(i - 1);
+                if (num instanceof Number && den instanceof Number)
+                {
+                    float f = ((Number) num).floatValue() / ((Number) 
den).floatValue();
+                    newSequence.remove(newSequence.size() - 1);
+                    newSequence.remove(newSequence.size() - 1);
+                    newSequence.add(f);
+                }
+                else
+                {
+                    newSequence.add(sequence.get(i)); // GIGO
+                }
+            }
+            else
+            {
+                newSequence.add(sequence.get(i));
+            }
+        }
+
+        newSequence.forEach(obj -> {
             if (obj instanceof CharStringCommand)
             {
                 List<Number> results = convertType2Command(numbers, 
(CharStringCommand) obj);


Reply via email to