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/01 16:48:06 UTC

svn commit: r1554632 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font: PDCIDFont.java PDSimpleFont.java

Author: lehmi
Date: Wed Jan  1 15:48:05 2014
New Revision: 1554632

URL: http://svn.apache.org/r1554632
Log:
PDFBOX-940: avoid false error messages when reading a CMap based on a proposal by Wolfgang Kronberg

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDSimpleFont.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java?rev=1554632&r1=1554631&r2=1554632&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDCIDFont.java Wed Jan  1 15:48:05 2014
@@ -17,6 +17,7 @@
 package org.apache.pdfbox.pdmodel.font;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -27,6 +28,7 @@ import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSNumber;
+import org.apache.pdfbox.io.IOUtils;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.util.ResourceLoader;
 
@@ -324,19 +326,32 @@ public abstract class PDCIDFont extends 
             cmap = cmapObjects.get(cidSystemInfo);
             if (cmap == null)
             {
-                String resourceName = resourceRootCMAP + cidSystemInfo;
+            	InputStream cmapStream = null;
                 try
                 {
-                    cmap = parseCmap(resourceRootCMAP, ResourceLoader.loadResource(resourceName));
-                    if (cmap == null)
+                    // look for a predefined CMap with the given name
+                    cmapStream = ResourceLoader.loadResource(resourceRootCMAP + cidSystemInfo);
+                    if (cmapStream != null)
                     {
-                        LOG.error("Error: Could not parse predefined CMAP file for '" + cidSystemInfo + "'");
+                    	cmap = parseCmap(resourceRootCMAP, cmapStream);
+                    	if (cmap == null)
+                    	{
+                    		LOG.error("Error: Could not parse predefined CMAP file for '" + cidSystemInfo + "'");
+                    	}
+                    }
+                    else
+                    {
+                		LOG.debug("Debug: '" + cidSystemInfo + "' isn't a predefined CMap, most likely it's embedded in the pdf itself.");
                     }
                 }
                 catch (IOException exception)
                 {
                     LOG.error("Error: Could not find predefined CMAP file for '" + cidSystemInfo + "'");
                 }
+                finally
+                {
+                	IOUtils.closeQuietly(cmapStream);
+                }
             }
         }
         else

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=1554632&r1=1554631&r2=1554632&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 Wed Jan  1 15:48:05 2014
@@ -17,6 +17,7 @@
 package org.apache.pdfbox.pdmodel.font;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.HashMap;
 
 import org.apache.commons.logging.Log;
@@ -31,6 +32,7 @@ import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.encoding.DictionaryEncoding;
 import org.apache.pdfbox.encoding.Encoding;
 import org.apache.pdfbox.encoding.EncodingManager;
+import org.apache.pdfbox.io.IOUtils;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.util.ResourceLoader;
 
@@ -308,19 +310,32 @@ public abstract class PDSimpleFont exten
 
         if (cmap == null && cmapName != null)
         {
-            String resourceName = resourceRootCMAP + cmapName;
+        	InputStream cmapStream = null;
             try
             {
-                cmap = parseCmap(resourceRootCMAP, ResourceLoader.loadResource(resourceName));
-                if (cmap == null && encodingName == null)
+                // look for a predefined CMap with the given name
+                cmapStream = ResourceLoader.loadResource(resourceRootCMAP + cmapName);
+                if (cmapStream != null)
+                {
+                	cmap = parseCmap(resourceRootCMAP, cmapStream);
+                	if (cmap == null && encodingName == null)
+                	{
+                		LOG.error("Error: Could not parse predefined CMAP file for '" + cmapName + "'");
+                	}
+                }
+                else
                 {
-                    LOG.error("Error: Could not parse predefined CMAP file for '" + cmapName + "'");
+            		LOG.debug("Debug: '" + cmapName + "' isn't a predefined map, most likely it's embedded in the pdf itself.");
                 }
             }
             catch (IOException exception)
             {
                 LOG.error("Error: Could not find predefined CMAP file for '" + cmapName + "'");
             }
+            finally
+            {
+            	IOUtils.closeQuietly(cmapStream);
+            }
         }
     }