Author: tilman
Date: Tue Feb 25 08:06:53 2025
New Revision: 1924038

URL: http://svn.apache.org/viewvc?rev=1924038&view=rev
Log:
PDFBOX-5963: get base encoding if available

Modified:
    
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java

Modified: 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
URL: 
http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java?rev=1924038&r1=1924037&r2=1924038&view=diff
==============================================================================
--- 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
 (original)
+++ 
pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
 Tue Feb 25 08:06:53 2025
@@ -18,6 +18,8 @@ package org.apache.pdfbox.pdmodel.font.e
 
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
@@ -31,6 +33,8 @@ import org.apache.pdfbox.cos.COSNumber;
  */
 public class DictionaryEncoding extends Encoding
 {
+    private static final Log LOG = LogFactory.getLog(DictionaryEncoding.class);
+
     private final COSDictionary encoding;
     private final Encoding baseEncoding;
     private final Map<Integer, String> differences = new HashMap<Integer, 
String>();
@@ -74,7 +78,24 @@ public class DictionaryEncoding extends
     public DictionaryEncoding(COSDictionary fontEncoding)
     {
         encoding = fontEncoding;
-        baseEncoding = null;
+        COSName name = encoding.getCOSName(COSName.BASE_ENCODING);
+        if (name != null)
+        {
+            baseEncoding = Encoding.getInstance(name); // null when the name 
is invalid
+            if (baseEncoding != null)
+            {
+                // PDFBOX-5963
+                // PDF Specification: "Differences array shall specify the 
complete character
+                // encoding for this font" but other viewers read it, thus we 
do too.
+                LOG.warn("/BaseEncoding in type 3 font");
+                codeToName.putAll(baseEncoding.codeToName);
+                inverted.putAll(baseEncoding.inverted);
+            }
+        }
+        else
+        {
+            baseEncoding = null;
+        }
         applyDifferences();
     }
     


Reply via email to