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 2014/07/01 02:40:14 UTC
svn commit: r1606956 - in /pdfbox/trunk:
fontbox/src/main/java/org/apache/fontbox/util/FontManager.java
pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
Author: jahewson
Date: Tue Jul 1 00:40:14 2014
New Revision: 1606956
URL: http://svn.apache.org/r1606956
Log:
PDFBOX-2169: NPE in PDTrueTypeFont.makeFontDescriptor
Modified:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/util/FontManager.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/util/FontManager.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/util/FontManager.java?rev=1606956&r1=1606955&r2=1606956&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/util/FontManager.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/util/FontManager.java Tue Jul 1 00:40:14 2014
@@ -50,6 +50,25 @@ public class FontManager
// HashMap with all known true type fonts
private static HashMap<String, String> fontMappingTTF = new HashMap<String, String>();
+ // fallback font
+ private static TrueTypeFont standardFont;
+
+ static
+ {
+ try
+ {
+ standardFont = findTTFont("Arial");
+ if (standardFont == null)
+ {
+ throw new IOException("Could not load TTF fallback font");
+ }
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
private FontManager()
{
}
@@ -318,23 +337,33 @@ public class FontManager
* Search for a true type font for the given font name.
*
* @param fontname the given font name
- * @return the mapped true type font
+ * @return the mapped true type font, or null if none could be found
* @throws IOException if something went wrong
*/
public static TrueTypeFont findTTFont(String fontname) throws IOException
{
- String ttffontname = findTTFontname(fontname);
+ String ttfFontName = findTTFontname(fontname);
TrueTypeFont ttfFont = null;
- if (ttffontname != null)
+ if (ttfFontName != null)
{
TTFParser ttfParser = new TTFParser();
- InputStream fontStream = ResourceLoader.loadResource(ttffontname);
+ InputStream fontStream = ResourceLoader.loadResource(ttfFontName);
if (fontStream == null)
{
- throw new IOException("Can't load external font: " + ttffontname);
+ throw new IOException("Can't load external font: " + ttfFontName);
}
ttfFont = ttfParser.parseTTF(fontStream);
}
return ttfFont;
}
+
+ /**
+ * Get the standard font from the environment.
+ *
+ * @return standard font
+ */
+ public static TrueTypeFont getStandardFont()
+ {
+ return standardFont;
+ }
}
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=1606956&r1=1606955&r2=1606956&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 Tue Jul 1 00:40:14 2014
@@ -289,6 +289,15 @@ public class PDTrueTypeFont extends PDFo
}
}
+ if (this.getFontEncoding() == null)
+ {
+ // todo: calling this.getFontEncoding() doesn't work if the font is loaded
+ // from the local system, because it relies on the FontDescriptor!
+ // We make do for now by returning an incomplete descriptor pending further
+ // refactoring of PDFont#determineEncoding().
+ return fd;
+ }
+
Map<Integer, String> codeToName = this.getFontEncoding().getCodeToNameMap();
int firstChar = Collections.min(codeToName.keySet());
@@ -372,6 +381,10 @@ public class PDTrueTypeFont extends PDFo
// check if there is a font mapping for an external font file
ttf = FontManager.findTTFont(getBaseFont());
}
+ if (ttf == null)
+ {
+ ttf = FontManager.getStandardFont();
+ }
}
return ttf;
}