1 package org.simantics.export.core.pdf;
\r
4 import java.io.FileOutputStream;
\r
5 import java.io.IOException;
\r
6 import java.util.ArrayList;
\r
7 import java.util.List;
\r
9 import com.lowagie.text.pdf.PRStream;
\r
10 import com.lowagie.text.pdf.PdfArray;
\r
11 import com.lowagie.text.pdf.PdfDictionary;
\r
12 import com.lowagie.text.pdf.PdfName;
\r
13 import com.lowagie.text.pdf.PdfReader;
\r
14 import com.lowagie.text.pdf.PdfString;
\r
16 public class ImportPdfReader {
\r
18 /** File if opened from file */
\r
21 /** iText pdf reader */
\r
22 public PdfReader reader;
\r
24 List<Attachment> attachments;
\r
26 public ImportPdfReader() {
\r
29 public ImportPdfReader(File file) throws IOException {
\r
31 reader = new PdfReader(file.getAbsolutePath());
\r
34 public List<Attachment> getAttachments() {
\r
35 if ( attachments != null ) return attachments;
\r
36 attachments = new ArrayList<Attachment>();
\r
37 PdfDictionary root = reader.getCatalog();
\r
38 PdfDictionary names = (PdfDictionary)PdfReader.getPdfObject(root.get(PdfName.NAMES));
\r
41 PdfDictionary embeddedfiles = names.getAsDict(PdfName.EMBEDDEDFILES);
\r
42 if (embeddedfiles == null)
\r
44 PdfArray filespecs = embeddedfiles.getAsArray(PdfName.NAMES);
\r
45 if (filespecs == null)
\r
47 for (int i = 0; i < filespecs.size();) {
\r
48 Attachment a = new Attachment();
\r
49 filespecs.getAsString(i++);
\r
50 a.filespec = filespecs.getAsDict(i++);
\r
51 a.refs = a.filespec.getAsDict(PdfName.EF);
\r
52 for (Object _key : a.refs.getKeys()) {
\r
53 a.key = (PdfName) _key;
\r
54 a.filename = a.filespec.getAsString(a.key);
\r
55 attachments.add( a );
\r
61 public List<Attachment> getAttachments(String extension) {
\r
62 ArrayList<Attachment> result = new ArrayList<Attachment>();
\r
63 for ( Attachment a : getAttachments() ) {
\r
64 if ( a.getFilename().endsWith(extension) ) {
\r
71 public void close() {
\r
72 if ( reader!=null ) {
\r
78 public static class Attachment {
\r
79 PdfDictionary filespec;
\r
84 public String getFilename() {
\r
85 return filename.toUnicodeString();
\r
88 public void saveTo(File file) throws IOException {
\r
89 FileOutputStream fos;
\r
91 if ( !file.exists() ) file.createNewFile();
\r
92 fos = new FileOutputStream(file);
\r
94 stream = (PRStream) PdfReader.getPdfObject(refs.getAsIndirectObject(key));
\r
95 fos.write(PdfReader.getStreamBytes(stream));
\r