Author: jahewson
Date: Sun May 3 20:53:37 2015
New Revision: 1677483
URL: http://svn.apache.org/r1677483
Log:
PDFBOX-1900: Fix mapping of standard Symbol font
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java
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/PDType1CFont.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/ExternalFonts.java
URL:
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java?rev=1677483&r1=1677482&r2=1677483&view=diff
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java
(original)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/ExternalFonts.java
Sun May 3 20:53:37 2015
@@ -154,7 +154,7 @@ public final class ExternalFonts
Arrays.asList("TimesNewRomanPS-BoldItalicMT",
"TimesNewRomanPS-BoldItalic",
"TimesNewRoman-BoldItalic",
"LiberationSerif-BoldItalic",
"NimbusRomNo9L-MediItal"));
- substitutes.put("Symbol", Arrays.asList("SymbolMT", "StandardSymL"));
+ substitutes.put("Symbol", Arrays.asList("Symbol", "SymbolMT",
"StandardSymL"));
substitutes.put("ZapfDingbats", Arrays.asList("ZapfDingbatsITC",
"Dingbats", "MS-Gothic"));
// extra substitute mechanism for CJK CIDFonts when all we know is the
ROS
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=1677483&r1=1677482&r2=1677483&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
Sun May 3 20:53:37 2015
@@ -145,22 +145,25 @@ public abstract class PDSimpleFont exten
this.encoding = StandardEncoding.INSTANCE;
}
+ // normalise the standard 14 name, e.g "Symbol,Italic" -> "Symbol"
+ String standard14Name = Standard14Fonts.getMappedFontName(getName());
+
// TTFs may have null encoding, but if it's standard 14 then we know
it's Standard Encoding
if (this.encoding == null && isStandard14() &&
- !getName().equals("Symbol") &&
- !getName().equals("ZapfDingbats"))
+ !standard14Name.equals("Symbol") &&
+ !standard14Name.equals("ZapfDingbats"))
{
this.encoding = StandardEncoding.INSTANCE;
}
- // todo: what about Symbol and ZapfDingbats?
// assign the glyph list based on the font
- if ("ZapfDingbats".equals(getName()))
+ if ("ZapfDingbats".equals(standard14Name))
{
glyphList = GlyphList.getZapfDingbats();
}
else
{
+ // StandardEncoding and Symbol are in the AGL
glyphList = GlyphList.getAdobeGlyphList();
}
}
@@ -245,7 +248,8 @@ public abstract class PDSimpleFont exten
}
else if (isStandard14())
{
- return getName().equals("Symbol") ||
getName().equals("ZapfDingbats");
+ String mappedName = Standard14Fonts.getMappedFontName(getName());
+ return mappedName.equals("Symbol") ||
mappedName.equals("ZapfDingbats");
}
else
{
@@ -378,11 +382,7 @@ public abstract class PDSimpleFont exten
return false;
}
- /**
- * Returns the glyph width from the AFM if this is a Standard 14 font.
- * @param code character code
- * @return width in 1/1000 text space
- */
+ @Override
protected final float getStandard14Width(int code)
{
if (getStandard14AFM() != null)
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=1677483&r1=1677482&r2=1677483&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
Sun May 3 20:53:37 2015
@@ -38,6 +38,7 @@ import org.apache.pdfbox.pdmodel.font.en
import org.apache.pdfbox.pdmodel.font.encoding.MacOSRomanEncoding;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.common.PDStream;
+import org.apache.pdfbox.pdmodel.font.encoding.Type1Encoding;
/**
* TrueType font.
@@ -171,9 +172,17 @@ public class PDTrueTypeFont extends PDSi
@Override
protected Encoding readEncodingFromFont() throws IOException
{
- // for symbolic fonts the (3, 0) (Windows, Symbol) cmap is the font's
built-in encoding
- // but this is handled by codeToGID
- return null;
+ if (getStandard14AFM() != null)
+ {
+ // read from AFM
+ return new Type1Encoding(getStandard14AFM());
+ }
+ else
+ {
+ // for symbolic fonts the (3, 0) (Windows, Symbol) cmap is the
font's built-in encoding
+ // but this is handled by codeToGID
+ return null;
+ }
}
/**
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
URL:
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java?rev=1677483&r1=1677482&r2=1677483&view=diff
==============================================================================
---
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
(original)
+++
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
Sun May 3 20:53:37 2015
@@ -178,7 +178,15 @@ public class PDType1CFont extends PDSimp
@Override
protected Encoding readEncodingFromFont() throws IOException
{
- return Type1Encoding.fromFontBox(type1Equivalent.getEncoding());
+ if (getStandard14AFM() != null)
+ {
+ // read from AFM
+ return new Type1Encoding(getStandard14AFM());
+ }
+ else
+ {
+ return Type1Encoding.fromFontBox(type1Equivalent.getEncoding());
+ }
}
@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=1677483&r1=1677482&r2=1677483&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
Sun May 3 20:53:37 2015
@@ -329,14 +329,14 @@ public class PDType1Font extends PDSimpl
public float getWidthFromFont(int code) throws IOException
{
String name = codeToName(code);
- if (getStandard14AFM() != null)
- {
- return getStandard14Width(code);
- }
- else
+
+ // width of .notdef is ignored for substitutes, see PDFBOX-1900
+ if (!isEmbedded && name.equals(".notdef"))
{
- return type1Equivalent.getWidth(name);
+ return 250;
}
+
+ return type1Equivalent.getWidth(name);
}
@Override