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 2013/03/10 18:58:55 UTC
svn commit: r1454887 -
/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java
Author: lehmi
Date: Sun Mar 10 17:58:54 2013
New Revision: 1454887
URL: http://svn.apache.org/r1454887
Log:
PDFBOX-1538: handle both kinds of embedded files tree configurations
Modified:
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java
Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java?rev=1454887&r1=1454886&r2=1454887&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java Sun Mar 10 17:58:54 2013
@@ -18,13 +18,16 @@ package org.apache.pdfbox.examples.pdmod
import java.io.File;
import java.io.FileOutputStream;
-import java.util.Iterator;
+import java.io.IOException;
+import java.util.List;
import java.util.Map;
import org.apache.pdfbox.exceptions.InvalidPasswordException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentNameDictionary;
import org.apache.pdfbox.pdmodel.PDEmbeddedFilesNameTreeNode;
+import org.apache.pdfbox.pdmodel.common.COSObjectable;
+import org.apache.pdfbox.pdmodel.common.PDNameTreeNode;
import org.apache.pdfbox.pdmodel.common.filespecification.PDComplexFileSpecification;
import org.apache.pdfbox.pdmodel.common.filespecification.PDEmbeddedFile;
@@ -58,7 +61,6 @@ public class ExtractEmbeddedFiles
else
{
PDDocument document = null;
-
try
{
File pdfFile = new File(args[0]);
@@ -80,23 +82,23 @@ public class ExtractEmbeddedFiles
}
}
PDDocumentNameDictionary namesDictionary =
- new PDDocumentNameDictionary( document.getDocumentCatalog() );
+ new PDDocumentNameDictionary( document.getDocumentCatalog() );
PDEmbeddedFilesNameTreeNode efTree = namesDictionary.getEmbeddedFiles();
if (efTree != null)
{
- Map<String,Object> names = efTree.getNames();
- Iterator<String> namesKeys = names.keySet().iterator();
- while (namesKeys.hasNext())
+ Map<String,COSObjectable> names = efTree.getNames();
+ if (names != null)
+ {
+ extractFiles(names, filePath);
+ }
+ else
{
- String filename = namesKeys.next();
- PDComplexFileSpecification fileSpec = (PDComplexFileSpecification)names.get(filename);
- PDEmbeddedFile embeddedFile = fileSpec.getEmbeddedFile();
- String embeddedFilename = filePath+filename;
- File file = new File(filePath+filename);
- System.out.println("Writing "+ embeddedFilename);
- FileOutputStream fos = new FileOutputStream(file);
- fos.write(embeddedFile.getByteArray());
- fos.close();
+ List<PDNameTreeNode> kids = efTree.getKids();
+ for (PDNameTreeNode node : kids)
+ {
+ names = node.getNames();
+ extractFiles(names, filePath);
+ }
}
}
}
@@ -111,6 +113,21 @@ public class ExtractEmbeddedFiles
}
+ private static void extractFiles(Map<String,COSObjectable> names, String filePath)
+ throws IOException
+ {
+ for (String filename : names.keySet())
+ {
+ PDComplexFileSpecification fileSpec = (PDComplexFileSpecification)names.get(filename);
+ PDEmbeddedFile embeddedFile = fileSpec.getEmbeddedFile();
+ String embeddedFilename = filePath+filename;
+ File file = new File(filePath+filename);
+ System.out.println("Writing "+ embeddedFilename);
+ FileOutputStream fos = new FileOutputStream(file);
+ fos.write(embeddedFile.getByteArray());
+ fos.close();
+ }
+ }
/**
* This will print the usage for this program.
*/