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 04:57:43 UTC
svn commit: r1606970 - in /pdfbox/trunk:
fontbox/src/main/java/org/apache/fontbox/util/
pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/
pdfbox/src/main/java/org/apache/pdfbox/rendering/
pdfbox/src/main/java/org/apache/pdfbox/util/ pdfbox/src/main/...
Author: jahewson
Date: Tue Jul 1 02:57:43 2014
New Revision: 1606970
URL: http://svn.apache.org/r1606970
Log:
PDFBOX-2169: improve error for missing standard font (partial push)
Added:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/util/SystemFontManager.java
- copied, changed from r1606967, pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/util/FontManager.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFFontManager.java
- copied, changed from r1606966, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontManager.java
Removed:
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/util/FontManager.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontManager.java
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetTextFont.java
pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/ResourcesValidationProcess.java
Copied: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/util/SystemFontManager.java (from r1606967, 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/SystemFontManager.java?p2=pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/util/SystemFontManager.java&p1=pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/util/FontManager.java&r1=1606967&r2=1606970&rev=1606970&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/SystemFontManager.java Tue Jul 1 02:57:43 2014
@@ -32,28 +32,19 @@ import org.apache.fontbox.ttf.TrueTypeFo
import org.apache.fontbox.util.autodetect.FontFileFinder;
/**
- * This class is used as manager for local fonts. It's based on the font manager provided by Apache FOP. see
- * org.apache.fop.fonts.FontManager.java
+ * System font manager. Based on the font manager provided by Apache FOP.
+ *
+ * See: org.apache.fop.fonts.FontManager
*/
-
-public class FontManager
+public class SystemFontManager
{
- /**
- * Log instance.
- */
- private static final Log LOG = LogFactory.getLog(FontManager.class);
+ private static final Log LOG = LogFactory.getLog(SystemFontManager.class);
private static HashMap<String, String> ttfFontfiles = new HashMap<String, String>();
-
private static boolean fontsLoaded = false;
-
- // HashMap with all known true type fonts
private static HashMap<String, String> fontMappingTTF = new HashMap<String, String>();
- // fallback font
- private static TrueTypeFont standardFont;
-
- private FontManager()
+ private SystemFontManager()
{
}
@@ -340,38 +331,4 @@ public class FontManager
}
return ttfFont;
}
-
- /**
- * Get the standard font from the environment.
- *
- * @return standard font
- */
- public static TrueTypeFont getStandardFont() throws IOException
- {
- if (standardFont == null)
- {
- // todo: make this configurable
-
- // Windows
- standardFont = findTTFont("Arial");
-
- if (standardFont == null)
- {
- // OS X
- standardFont = findTTFont("Helvetica");
- }
-
- if (standardFont == null)
- {
- // Linux
- standardFont = findTTFont("Liberation Sans");
- }
-
- if (standardFont == null)
- {
- throw new IOException("Could not find TTF fallback font on the system");
- }
- }
- return standardFont;
- }
}
Copied: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFFontManager.java (from r1606966, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontManager.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFFontManager.java?p2=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFFontManager.java&p1=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontManager.java&r1=1606966&r2=1606970&rev=1606970&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FontManager.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDFFontManager.java Tue Jul 1 02:57:43 2014
@@ -25,27 +25,27 @@ import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.fontbox.ttf.TrueTypeFont;
+import org.apache.fontbox.util.SystemFontManager;
import org.apache.pdfbox.util.ResourceLoader;
/**
- * This class is used as font manager.
- * @author <a href="mailto:andreas@lehmi.de">Andreas Lehmkühler</a>
- * @version $Revision: 1.0 $
+ * PDF font manager.
+ *
+ * @author Andreas Lehmkühler
*/
-
-public class FontManager
+public final class PDFFontManager
{
- /**
- * Log instance.
- */
- private static final Log LOG = LogFactory.getLog(FontManager.class);
+ private static final Log LOG = LogFactory.getLog(PDFFontManager.class);
- // HashMap with all known fonts
+ // AWT
private static HashMap<String,java.awt.Font> envFonts = new HashMap<String,java.awt.Font>();
- // the standard font
- private final static String standardFont = "helvetica";
- private static Properties fontMapping = new Properties();
-
+ private final static String awtFallback = "helvetica";
+ private static Properties fontMapping = new Properties();
+
+ // system TTF
+ private static TrueTypeFont ttfFallback;
+
static {
try
{
@@ -63,7 +63,7 @@ public class FontManager
loadFontMapping();
}
- private FontManager()
+ private PDFFontManager()
{
}
@@ -73,21 +73,55 @@ public class FontManager
* @return The standard font
*
*/
- public static java.awt.Font getStandardFont()
+ public static java.awt.Font getAWTFallbackFont()
{
- Font awtFont = getAwtFont(standardFont);
+ Font awtFont = getAwtFont(awtFallback);
if (awtFont == null)
{
// PDFBOX-1069
- LOG.error("Standard font '" + standardFont + "' is not part of the environment");
+ LOG.error("Standard font '" + awtFallback + "' is not part of the environment");
LOG.error("Available fonts:");
for (Font font : GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts())
{
LOG.error("\t" + font.getFontName());
- }
+ }
}
return awtFont;
}
+
+ /**
+ * Get the standard font from the environment.
+ *
+ * @return standard font
+ */
+ public static TrueTypeFont getTrueTypeFallbackFont() throws IOException
+ {
+ if (ttfFallback == null)
+ {
+ // todo: make this configurable
+
+ // Windows
+ ttfFallback = SystemFontManager.findTTFont("Arial");
+
+ if (ttfFallback == null)
+ {
+ // OS X
+ ttfFallback = SystemFontManager.findTTFont("Helvetica");
+ }
+
+ if (ttfFallback == null)
+ {
+ // Linux
+ ttfFallback = SystemFontManager.findTTFont("Liberation Sans");
+ }
+
+ if (ttfFallback == null)
+ {
+ throw new IOException("Could not find TTF fallback font on the system");
+ }
+ }
+ return ttfFallback;
+ }
/**
* Get the font for the given fontname.
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=1606970&r1=1606969&r2=1606970&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 02:57:43 2014
@@ -42,7 +42,7 @@ import org.apache.fontbox.ttf.OS2Windows
import org.apache.fontbox.ttf.PostScriptTable;
import org.apache.fontbox.ttf.TTFParser;
import org.apache.fontbox.ttf.TrueTypeFont;
-import org.apache.fontbox.util.FontManager;
+import org.apache.fontbox.util.SystemFontManager;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.encoding.Encoding;
@@ -379,11 +379,11 @@ public class PDTrueTypeFont extends PDFo
if (ttf == null)
{
// check if there is a font mapping for an external font file
- ttf = FontManager.findTTFont(getBaseFont());
+ ttf = SystemFontManager.findTTFont(getBaseFont());
}
if (ttf == null)
{
- ttf = FontManager.getStandardFont();
+ ttf = PDFFontManager.getTrueTypeFallbackFont();
}
}
return ttf;
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1606970&r1=1606969&r2=1606970&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Tue Jul 1 02:57:43 2014
@@ -57,7 +57,7 @@ import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.common.PDMatrix;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
-import org.apache.pdfbox.pdmodel.font.FontManager;
+import org.apache.pdfbox.pdmodel.font.PDFFontManager;
import org.apache.pdfbox.pdmodel.font.PDCIDFontType0Font;
import org.apache.pdfbox.pdmodel.font.PDCIDFontType2Font;
import org.apache.pdfbox.pdmodel.font.PDFont;
@@ -389,7 +389,7 @@ public class PageDrawer extends PDFStrea
int textLength = charCodes.length;
for (int i = 0; i < textLength; i++)
{
- COSStream stream = font.getCharStream((char)charCodes[i]);
+ COSStream stream = font.getCharStream((char) charCodes[i]);
if (stream != null)
{
// save the current graphics state and matrices
@@ -410,7 +410,7 @@ public class PageDrawer extends PDFStrea
}
else
{
- LOG.debug("drawType3String: stream for character " + (char)charCodes[i] + " not found");
+ LOG.debug("drawType3String: stream for character " + (char) charCodes[i] + " not found");
}
}
}
@@ -480,7 +480,7 @@ public class PageDrawer extends PDFStrea
// check if the font is part of our environment
if (fd.getFontName() != null)
{
- awtFont = FontManager.getAwtFont(fd.getFontName());
+ awtFont = PDFFontManager.getAwtFont(fd.getFontName());
}
if (awtFont == null)
{
@@ -492,7 +492,7 @@ public class PageDrawer extends PDFStrea
{
// check if the font is part of our environment
String baseFont = type1Font.getBaseFont();
- awtFont = FontManager.getAwtFont(baseFont);
+ awtFont = PDFFontManager.getAwtFont(baseFont);
if (awtFont == null)
{
LOG.info("Can't find the specified basefont " + baseFont);
@@ -506,7 +506,7 @@ public class PageDrawer extends PDFStrea
if (awtFont == null)
{
// Fallback: we can't find anything, so we have to use the standard font
- awtFont = FontManager.getStandardFont();
+ awtFont = PDFFontManager.getAWTFallbackFont();
LOG.info("Using font " + awtFont.getName() + " instead of " + font.getBaseFont());
}
awtFonts.put(font, awtFont);
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java?rev=1606970&r1=1606969&r2=1606970&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/PDFStreamEngine.java Tue Jul 1 02:57:43 2014
@@ -508,7 +508,7 @@ public class PDFStreamEngine
/**
* @return Returns the fonts.
*/
- public Map<String, PDFont> getFonts()
+ public Map<String, PDFont> getFonts() throws IOException
{
if (streamResourcesStack.isEmpty())
{
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetTextFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetTextFont.java?rev=1606970&r1=1606969&r2=1606970&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetTextFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/operator/SetTextFont.java Tue Jul 1 02:57:43 2014
@@ -49,12 +49,7 @@ public class SetTextFont extends Operato
COSName fontName = (COSName)arguments.get( 0 );
float fontSize = ((COSNumber)arguments.get( 1 ) ).floatValue();
context.getGraphicsState().getTextState().setFontSize( fontSize );
-
- context.getGraphicsState().getTextState().setFont( (PDFont)context.getFonts().get( fontName.getName() ) );
- if( context.getGraphicsState().getTextState().getFont() == null )
- {
- throw new IOException( "Error: Could not find font(" + fontName + ") in map=" + context.getFonts() );
- }
+ context.getGraphicsState().getTextState().setFont( context.getFonts().get( fontName.getName() ) );
}
}
Modified: pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/ResourcesValidationProcess.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/ResourcesValidationProcess.java?rev=1606970&r1=1606969&r2=1606970&view=diff
==============================================================================
--- pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/ResourcesValidationProcess.java (original)
+++ pdfbox/trunk/preflight/src/main/java/org/apache/pdfbox/preflight/process/reflect/ResourcesValidationProcess.java Tue Jul 1 02:57:43 2014
@@ -26,7 +26,9 @@ import static org.apache.pdfbox.prefligh
import static org.apache.pdfbox.preflight.PreflightConfiguration.GRAPHIC_PROCESS;
import static org.apache.pdfbox.preflight.PreflightConfiguration.SHADDING_PATTERN_PROCESS;
import static org.apache.pdfbox.preflight.PreflightConfiguration.TILING_PATTERN_PROCESS;
+import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_FONTS_DICTIONARY_INVALID;
import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_GRAPHIC_INVALID_PATTERN_DEFINITION;
+import static org.apache.pdfbox.preflight.PreflightConstants.ERROR_PDF_PROCESSING_MISSING;
import static org.apache.pdfbox.preflight.PreflightConstants.TRANPARENCY_DICTIONARY_KEY_EXTGSTATE;
import java.io.IOException;
@@ -88,14 +90,21 @@ public class ResourcesValidationProcess
*/
protected void validateFonts(PreflightContext context, PDResources resources) throws ValidationException
{
- Map<String, PDFont> mapOfFonts = resources.getFonts();
- if (mapOfFonts != null)
+ try
{
- for (Entry<String, PDFont> entry : mapOfFonts.entrySet())
+ Map<String, PDFont> mapOfFonts = resources.getFonts();
+ if (mapOfFonts != null)
{
- ContextHelper.validateElement(context, entry.getValue(), FONT_PROCESS);
+ for (Entry<String, PDFont> entry : mapOfFonts.entrySet())
+ {
+ ContextHelper.validateElement(context, entry.getValue(), FONT_PROCESS);
+ }
}
}
+ catch (IOException e)
+ {
+ context.addValidationError(new ValidationError(ERROR_FONTS_DICTIONARY_INVALID, "Could not read font"));
+ }
}
/**