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/12/16 02:18:52 UTC

svn commit: r1645809 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: pdmodel/font/PDType1CFont.java rendering/PageDrawer.java

Author: jahewson
Date: Tue Dec 16 01:18:52 2014
New Revision: 1645809

URL: http://svn.apache.org/r1645809
Log:
PDFBOX-2499: Handle empty FontFile3

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType1CFont.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java

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=1645809&r1=1645808&r2=1645809&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 Tue Dec 16 01:18:52 2014
@@ -81,6 +81,11 @@ public class PDType1CFont extends PDSimp
             if (ff3Stream != null)
             {
                 bytes = IOUtils.toByteArray(ff3Stream.createInputStream());
+                if (bytes.length == 0)
+                {
+                    LOG.error("Invalid data for embedded Type1C font " + getName());
+                    bytes = null;
+                }
             }
         }
 
@@ -88,9 +93,12 @@ public class PDType1CFont extends PDSimp
         CFFType1Font cffEmbedded = null;
         try
         {
-            // note: this could be an OpenType file, fortunately CFFParser can handle that
-            CFFParser cffParser = new CFFParser();
-            cffEmbedded = (CFFType1Font)cffParser.parse(bytes).get(0);
+            if (bytes != null)
+            {
+                // note: this could be an OpenType file, fortunately CFFParser can handle that
+                CFFParser cffParser = new CFFParser();
+                cffEmbedded = (CFFType1Font)cffParser.parse(bytes).get(0);
+            }
         }
         catch (IOException e)
         {
@@ -187,17 +195,18 @@ public class PDType1CFont extends PDSimp
     {
         if (fontMatrix == null)
         {
-            List<Number> numbers = cffFont.getFontMatrix();
-            if (numbers != null && numbers.size() == 6)
-            {
-                fontMatrix = new Matrix(numbers.get(0).floatValue(), numbers.get(1).floatValue(),
-                                        numbers.get(2).floatValue(), numbers.get(3).floatValue(),
-                                        numbers.get(4).floatValue(), numbers.get(5).floatValue());
-            }
-            else
+            if (cffFont != null)
             {
-                return super.getFontMatrix();
+                List<Number> numbers = cffFont.getFontMatrix();
+                if (numbers != null && numbers.size() == 6)
+                {
+                    fontMatrix = new Matrix(numbers.get(0).floatValue(), numbers.get(1).floatValue(),
+                            numbers.get(2).floatValue(), numbers.get(3).floatValue(),
+                            numbers.get(4).floatValue(), numbers.get(5).floatValue());
+                    return fontMatrix;
+                }
             }
+            fontMatrix = super.getFontMatrix();
         }
         return fontMatrix;
     }

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=1645809&r1=1645808&r2=1645809&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 Dec 16 01:18:52 2014
@@ -384,10 +384,14 @@ public final class PageDrawer extends PD
         else if (font instanceof PDType1CFont)
         {
             PDType1CFont type1CFont = (PDType1CFont)font;
-            if (type1CFont.getCFFType1Font() != null) // todo: could be null (need to incorporate fallback)
+            if (type1CFont.getCFFType1Font() != null)
             {
                 glyph2D = new Type1Glyph2D(type1CFont);
             }
+            else
+            {
+                glyph2D = new Type1Glyph2D(type1CFont); // fallback to T1-equivalent
+            }
         }
         else if (font instanceof PDType0Font)
         {