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/04 14:35:32 UTC
svn commit: r1555348 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/CFFGlyph2D.java
Author: lehmi
Date: Sat Jan 4 13:35:32 2014
New Revision: 1555348
URL: http://svn.apache.org/r1555348
Log:
PDFBOX-1824: fixed code to name mapping
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdfviewer/font/CFFGlyph2D.java
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=1555348&r1=1555347&r2=1555348&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 Sat Jan 4 13:35:32 2014
@@ -45,7 +45,8 @@ public class CFFGlyph2D implements Glyph
private static final Log LOG = LogFactory.getLog(CFFGlyph2D.class);
private HashMap<Integer, GeneralPath> glyphs = new HashMap<Integer, GeneralPath>();
- private HashMap<Integer, Integer> codeToGlyph = new HashMap<Integer, Integer>();
+ private HashMap<String, Integer> nameToGlyph = new HashMap<String, Integer>();
+ private Map<Integer, String> codeToName = new LinkedHashMap<Integer, String>();
private String fontname = null;
/**
@@ -56,7 +57,6 @@ public class CFFGlyph2D implements Glyph
{
fontname = cffFont.getName();
Collection<CFFFont.Mapping> mappings = cffFont.getMappings();
- Map<String, Integer> nameToCode = new LinkedHashMap<String, Integer>();
// start with CFF built-in encoding
for (CFFFont.Mapping mapping : mappings)
{
@@ -69,14 +69,15 @@ public class CFFGlyph2D implements Glyph
{
code = mapping.getCode();
}
- nameToCode.put(mapping.getName(), code);
+ codeToName.put(code, mapping.getName());
}
- // override with PDF Encoding
+ // override existing entries with an optional PDF Encoding
if (encoding != null)
{
- for (Map.Entry<Integer, String> entry : encoding.getCodeToNameMap().entrySet())
+ Map<Integer, String> encodingCodeToName = encoding.getCodeToNameMap();
+ for (Integer key : encodingCodeToName.keySet())
{
- nameToCode.put(entry.getValue(), entry.getKey());
+ codeToName.put(key, encodingCodeToName.get(key));
}
}
CharStringRenderer renderer = cffFont.createRenderer();
@@ -95,7 +96,7 @@ public class CFFGlyph2D implements Glyph
if (glyph != null)
{
glyphs.put(glyphId, glyph);
- codeToGlyph.put(nameToCode.get(mapping.getName()), glyphId);
+ nameToGlyph.put(mapping.getName(), glyphId);
glyphId++;
}
}
@@ -124,10 +125,14 @@ public class CFFGlyph2D implements Glyph
@Override
public GeneralPath getPathForCharactercode(int code)
{
- if (codeToGlyph.containsKey(code))
- {
- return getPathForGlyphId(codeToGlyph.get(code));
- }
+ if (codeToName.containsKey(code))
+ {
+ String name = codeToName.get(code);
+ if (nameToGlyph.containsKey(name))
+ {
+ return getPathForGlyphId(nameToGlyph.get(name));
+ }
+ }
else
{
LOG.debug(fontname + ": glyphmapping for " + code + " not found!");
@@ -158,9 +163,13 @@ public class CFFGlyph2D implements Glyph
{
glyphs.clear();
}
- if (codeToGlyph != null)
+ if (codeToName != null)
+ {
+ codeToName.clear();
+ }
+ if (nameToGlyph != null)
{
- codeToGlyph.clear();
+ nameToGlyph.clear();
}
}
}