View Source

h3. About the Portfolio Capture Example

The Portfolio (Collections) Capture example demonstrates how to use the ICEpdf Document class to capture PDF page renders as image files of all documents that are contained in the collection. Once a file has been opened, the documents and pages can be iterated over, to generate an image capture of each page.

The source-code for this example is located at:
* [http://sventon.icesoft.org/svn/repos/repo/list/icepdf/trunk/icepdf/examples/capture/portfolio/].

A primer on using Maven or Gradle build commands can be found [here (Maven)| http://www.icesoft.org/wiki/display/PDF/Maven+Build] and [here (Gradle)| http://www.icesoft.org/wiki/display/PDF/Gradle+Build]

{code}
// open the url
Document document = new Document();

// setup threads to handle image capture.
ExecutorService executorService = Executors.newFixedThreadPool(8);
document.setFile(filePath);
// A fileNames tree indicates that we have a portfolio.
if (document.getCatalog().getNames() != null &&
document.getCatalog().getNames().getEmbeddedFilesNameTree() != null &&
catalog.getNames().getEmbeddedFilesNameTree().getRoot() != null) {
NameTree embeddedFilesNameTree = document.getCatalog().getNames().getEmbeddedFilesNameTree();
// one final check as some docs will have meta data but will specify a page mode.
if (catalog.getObject(Catalog.PAGEMODE_KEY) == null ||
((Name) catalog.getObject(Catalog.PAGEMODE_KEY)).getName().equalsIgnoreCase("UseAttachments")) {
if (embeddedFilesNameTree.getRoot() != null) {
Library library = document.getCatalog().getLibrary();
List filePairs = embeddedFilesNameTree.getRoot().getNamesAndValues();
List<Callable<Void>> callables =
new ArrayList<Callable<Void>>(filePairs.size() / 2);
// queue up the embedded documents
for (int i = 0, max = filePairs.size(); i < max; i += 2) {
// file name and file specification pairs.
String fileName = Utils.convertStringObject(library, (StringObject) filePairs.get(i));
HashMap tmp = (HashMap) library.getObject((Reference) filePairs.get(i + 1));

// file specification has the document stream
FileSpecification fileSpec = new FileSpecification(library, tmp);
tmp = fileSpec.getEmbeddedFileDictionary();

// create the stream instance from the embedded file streams File entry.
Reference fileRef = (Reference) tmp.get(FileSpecification.F_KEY);
Stream fileStream = (Stream) library.getObject(fileRef);
InputStream fileInputStream = fileStream.getDecodedByteArrayInputStream();

// queue the embedded document for page capture
System.out.println("Loading embedded file: " + fileName);
Document embeddedDocument = new Document();
embeddedDocument.setInputStream(fileInputStream, fileName);
callables.add(new CaptureDocument(embeddedDocument, i, fileName));
}
executorService.invokeAll(callables);
executorService.submit(new DocumentCloser(document)).get();
}
}
}
{code}