Author: lehmi
Date: Tue Sep 20 17:10:09 2011
New Revision: 1173259
URL: http://svn.apache.org/viewvc?rev=1173259&view=rev
Log:
PDFBOX-1118: export XObjectImages which are part of 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=1173259&r1=1173258&r2=1173259&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 Tue
Sep 20 17:10:09 2011
@@ -27,6 +27,8 @@ import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial;
+import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObject;
+import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectForm;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
/**
@@ -64,7 +66,7 @@ public class ExtractImages
private void extractImages( String[] args ) throws Exception
{
- if( args.length < 1 || args.length > 3 )
+ if( args.length < 1 || args.length > 4 )
{
usage();
}
@@ -144,27 +146,26 @@ public class ExtractImages
{
PDPage page = (PDPage)iter.next();
PDResources resources = page.getResources();
- Map images = resources.getImages();
- if( images != null )
+ // extract all XObjectImages which are part of the
page resources
+ processResources(resources, prefix, addKey);
+ Map<String, PDXObject> xObjects =
resources.getXObjects();
+ if( xObjects != null )
{
- Iterator imageIter = images.keySet().iterator();
- while( imageIter.hasNext() )
+ Iterator<String> xObjectsIter =
xObjects.keySet().iterator();
+ while( xObjectsIter.hasNext() )
{
- String key = (String)imageIter.next();
- PDXObjectImage image =
(PDXObjectImage)images.get( key );
- String name = null;
- if (addKey)
+ String key = xObjectsIter.next();
+ PDXObject xObject = xObjects.get( key );
+ // an XObjectForm may contain further
XObjectImages
+ if (xObject instanceof PDXObjectForm)
{
- name = getUniqueFileName( prefix + "_" +
key, image.getSuffix() );
+ PDXObjectForm xObjectForm =
(PDXObjectForm)xObject;
+ PDResources formResources =
xObjectForm.getResources();
+ processResources(formResources, prefix,
addKey);
}
- else
- {
- name = getUniqueFileName( prefix,
image.getSuffix() );
- }
- System.out.println( "Writing image:" + name );
- image.write2file( name );
}
}
+
}
}
finally
@@ -178,6 +179,31 @@ public class ExtractImages
}
}
+ private void processResources(PDResources resources, String prefix,
boolean addKey) throws IOException
+ {
+ Map<String, PDXObjectImage> images = resources.getImages();
+ if( images != null )
+ {
+ Iterator<String> imageIter = images.keySet().iterator();
+ while( imageIter.hasNext() )
+ {
+ String key = imageIter.next();
+ PDXObjectImage image = images.get( key );
+ 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 );
+ }
+ }
+ }
+
private String getUniqueFileName( String prefix, String suffix )
{
String uniqueName = null;