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);