You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2015/04/25 03:45:03 UTC
svn commit: r1675988 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font:
PDSimpleFont.java PDTrueTypeFont.java PDType1Font.java
Author: jahewson
Date: Sat Apr 25 01:45:03 2015
New Revision: 1675988
URL: http://svn.apache.org/r1675988
Log:
PDFBOX-2774: Fix incorrect encoding of PDTrueType fonts
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java?rev=1675988&r1=1675987&r2=1675988&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java Sat Apr 25 01:45:03 2015
@@ -16,6 +16,8 @@
*/
package org.apache.pdfbox.pdmodel.font;
+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.COSBase;
@@ -45,7 +47,8 @@ public abstract class PDSimpleFont exten
protected GlyphList glyphList;
private Boolean isSymbolic;
private final Set<Integer> noUnicode = new HashSet<Integer>(); // for logging
-
+ private Map<String, Integer> invertedEncoding; // for writing
+
/**
* Constructor for embedding.
*/
@@ -187,6 +190,29 @@ public abstract class PDSimpleFont exten
}
/**
+ * Inverts the font's Encoding. Any duplicate (Name -> Code) mappings will be lost.
+ */
+ protected Map<String, Integer> getInvertedEncoding()
+ {
+ if (invertedEncoding != null)
+ {
+ return invertedEncoding;
+ }
+
+ invertedEncoding = new HashMap<String, Integer>();
+ //Map<Integer, String> codeToName = MacOSRomanEncoding.INSTANCE.getCodeToNameMap();
+ Map<Integer, String> codeToName = encoding.getCodeToNameMap();
+ for (Map.Entry<Integer, String> entry : codeToName.entrySet())
+ {
+ if (!invertedEncoding.containsKey(entry.getValue()))
+ {
+ invertedEncoding.put(entry.getValue(), entry.getKey());
+ }
+ }
+ return invertedEncoding;
+ }
+
+ /**
* Returns true the font is a symbolic (that is, it does not use the Adobe Standard Roman
* character set).
*/
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java?rev=1675988&r1=1675987&r2=1675988&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java Sat Apr 25 01:45:03 2015
@@ -261,14 +261,18 @@ public class PDTrueTypeFont extends PDSi
String.format("U+%04X is not available in this font's Encoding", unicode));
}
- int gid = codeToGID(unicode);
+ String name = getGlyphList().codePointToName(unicode);
+ Map<String, Integer> inverted = getInvertedEncoding();
+
+ int gid = ttf.getUnicodeCmap().getGlyphId(unicode);
if (gid == 0)
{
throw new IllegalArgumentException(
String.format("No glyph for U+%04X in font %s", unicode, getName()));
}
-
- return new byte[] { (byte)unicode };
+
+ int code = inverted.get(name);
+ return new byte[] { (byte)code };
}
@Override
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java?rev=1675988&r1=1675987&r2=1675988&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1Font.java Sat Apr 25 01:45:03 2015
@@ -87,8 +87,6 @@ public class PDType1Font extends PDSimpl
private final boolean isDamaged;
private Matrix fontMatrix;
- private Map<String, Integer> invertedEncoding; // for writing
-
/**
* Creates a Type 1 standard 14 font for embedding.
*
@@ -327,29 +325,6 @@ public class PDType1Font extends PDSimpl
return new byte[] { (byte)code };
}
- /**
- * Inverts the font's Encoding. Any duplicate (Name -> Code) mappings will be lost.
- */
- private Map<String, Integer> getInvertedEncoding()
- {
- if (invertedEncoding != null)
- {
- return invertedEncoding;
- }
-
- invertedEncoding = new HashMap<String, Integer>();
- //Map<Integer, String> codeToName = MacOSRomanEncoding.INSTANCE.getCodeToNameMap();
- Map<Integer, String> codeToName = encoding.getCodeToNameMap();
- for (Map.Entry<Integer, String> entry : codeToName.entrySet())
- {
- if (!invertedEncoding.containsKey(entry.getValue()))
- {
- invertedEncoding.put(entry.getValue(), entry.getKey());
- }
- }
- return invertedEncoding;
- }
-
@Override
public float getWidthFromFont(int code) throws IOException
{