Author: tilman
Date: Tue Feb 25 08:06:48 2025
New Revision: 1924037
URL: http://svn.apache.org/viewvc?rev=1924037&view=rev
Log:
PDFBOX-5963: get base encoding if available
Modified:
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
Modified:
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java?rev=1924037&r1=1924036&r2=1924037&view=diff
==============================================================================
---
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
(original)
+++
pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/DictionaryEncoding.java
Tue Feb 25 08:06:48 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<>();
@@ -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();
}