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 2011/12/01 10:53:04 UTC

svn commit: r1209017 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/ExtractImages.java

Author: lehmi
Date: Thu Dec  1 09:53:04 2011
New Revision: 1209017

URL: http://svn.apache.org/viewvc?rev=1209017&view=rev
Log:
PDFBOX-1169: iterate recursively over the resources to extract images which are embedded in a XObjectForm

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/ExtractImages.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/ExtractImages.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/ExtractImages.java?rev=1209017&r1=1209016&r2=1209017&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/ExtractImages.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/ExtractImages.java Thu Dec  1 09:53:04 2011
@@ -148,24 +148,6 @@ public class ExtractImages
                         PDResources resources = page.getResources();
                         // extract all XObjectImages which are part of the page resources
                         processResources(resources, prefix, addKey);
-                        Map<String, PDXObject> xObjects = resources.getXObjects();
-                        if( xObjects != null )
-                        {
-                            Iterator<String> xObjectsIter = xObjects.keySet().iterator();
-                            while( xObjectsIter.hasNext() )
-                            {
-                                String key = xObjectsIter.next();
-                                PDXObject xObject = xObjects.get( key );
-                                // an XObjectForm may contain further XObjectImages
-                                if (xObject instanceof PDXObjectForm) 
-                                {
-                                    PDXObjectForm xObjectForm = (PDXObjectForm)xObject;
-                                    PDResources formResources = xObjectForm.getResources();
-                                    processResources(formResources, prefix, addKey);
-                                }
-                            }
-                        }
-
                     }
                 }
                 finally
@@ -181,25 +163,37 @@ public class ExtractImages
 
     private void processResources(PDResources resources, String prefix, boolean addKey) throws IOException
     {
-        Map<String, PDXObjectImage> images = resources.getImages();
-        if( images != null )
+        Map<String, PDXObject> xobjects = resources.getXObjects();
+        if( xobjects != null )
         {
-            Iterator<String> imageIter = images.keySet().iterator();
-            while( imageIter.hasNext() )
+            Iterator<String> xobjectIter = xobjects.keySet().iterator();
+            while( xobjectIter.hasNext() )
             {
-                String key = imageIter.next();
-                PDXObjectImage image = images.get( key );
-                String name = null;
-                if (addKey) 
+                String key = xobjectIter.next();
+                PDXObject xobject = xobjects.get( key );
+                // write the images
+                if (xobject instanceof PDXObjectImage)
                 {
-                    name = getUniqueFileName( prefix + "_" + key, image.getSuffix() );
+                    PDXObjectImage image = (PDXObjectImage)xobject;
+                    String name = null;
+                    if (addKey) 
+                    {
+                        name = getUniqueFileName( prefix + "_" + key, image.getSuffix() );
+                    }
+                    else 
+                    {
+                        name = getUniqueFileName( prefix, image.getSuffix() );
+                    }
+                    System.out.println( "Writing image:" + name );
+                    image.write2file( name );
                 }
-                else 
+                // maybe there are more images embedded in a form object
+                else if (xobject instanceof PDXObjectForm)
                 {
-                    name = getUniqueFileName( prefix, image.getSuffix() );
+                    PDXObjectForm xObjectForm = (PDXObjectForm)xobject;
+                    PDResources formResources = xObjectForm.getResources();
+                    processResources(formResources, prefix, addKey);
                 }
-                System.out.println( "Writing image:" + name );
-                image.write2file( name );
             }
         }
     }