You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2014/01/02 11:07:11 UTC
svn commit: r1554779 - in /pdfbox/trunk:
fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/CFFGlyph2D.java
Author: lehmi
Date: Thu Jan 2 10:07:10 2014
New Revision: 1554779
URL: http://svn.apache.org/r1554779
Log:
PDFBOX-1824: fixed some glyph mapping issues as proposed by John Hewson
Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/CFFGlyph2D.java
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java?rev=1554779&r1=1554778&r2=1554779&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java Thu Jan 2 10:07:10 2014
@@ -584,7 +584,8 @@ public class CFFParser
}
else
{
- return CFFStandardString.getName(0);
+ // technically this maps to .notdef, but we need a unique glyph name
+ return "SID" + index;
}
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/CFFGlyph2D.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/CFFGlyph2D.java?rev=1554779&r1=1554778&r2=1554779&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/CFFGlyph2D.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/CFFGlyph2D.java Thu Jan 2 10:07:10 2014
@@ -28,6 +28,7 @@ import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.fontbox.cff.CFFFont;
+import org.apache.fontbox.cff.CFFFontROS;
import org.apache.fontbox.cff.CharStringRenderer;
import org.apache.pdfbox.encoding.Encoding;
@@ -54,14 +55,30 @@ public class CFFGlyph2D implements Glyph
public CFFGlyph2D(CFFFont cffFont, Encoding encoding)
{
fontname = cffFont.getName();
- Map<String, Integer> nameToCode = encoding != null ? encoding.getNameToCodeMap() : null;
Collection<CFFFont.Mapping> mappings = cffFont.getMappings();
- Map<Integer, String> codeToNameMap = new LinkedHashMap<Integer, String>();
+ Map<String, Integer> nameToCode = new LinkedHashMap<String, Integer>();
+ // start with CFF built-in encoding
for (CFFFont.Mapping mapping : mappings)
{
- codeToNameMap.put(mapping.getCode(), mapping.getName());
+ int code;
+ if (cffFont instanceof CFFFontROS)
+ {
+ code = mapping.getSID();
+ }
+ else
+ {
+ code = mapping.getCode();
+ }
+ nameToCode.put(mapping.getName(), code);
+ }
+ // override with PDF Encoding
+ if (encoding != null)
+ {
+ for (Map.Entry<Integer, String> entry : encoding.getCodeToNameMap().entrySet())
+ {
+ nameToCode.put(entry.getValue(), entry.getKey());
+ }
}
-
CharStringRenderer renderer = cffFont.createRenderer();
int glyphId = 0;
for (CFFFont.Mapping mapping : mappings)
@@ -78,13 +95,7 @@ public class CFFGlyph2D implements Glyph
if (glyph != null)
{
glyphs.put(glyphId, glyph);
- int code = mapping.getSID();
- String name = mapping.getName();
- if (nameToCode != null && nameToCode.containsKey(name))
- {
- code = nameToCode.get(name);
- }
- codeToGlyph.put(code, glyphId);
+ codeToGlyph.put(nameToCode.get(mapping.getName()), glyphId);
glyphId++;
}
}