/**
  * Extracts document level attachments
  *
  * @param filename a file from which document level attachments will be extracted
  * @throws IOException
  */
 public void extractDocLevelAttachments(String filename) throws IOException {
   PdfReader reader = new PdfReader(filename);
   PdfDictionary root = reader.getCatalog();
   PdfDictionary documentnames = root.getAsDict(PdfName.NAMES);
   PdfDictionary embeddedfiles = documentnames.getAsDict(PdfName.EMBEDDEDFILES);
   PdfArray filespecs = embeddedfiles.getAsArray(PdfName.NAMES);
   PdfDictionary filespec;
   PdfDictionary refs;
   FileOutputStream fos;
   PRStream stream;
   for (int i = 0; i < filespecs.size(); ) {
     filespecs.getAsString(i++);
     filespec = filespecs.getAsDict(i++);
     refs = filespec.getAsDict(PdfName.EF);
     for (PdfName key : refs.getKeys()) {
       fos = new FileOutputStream(String.format(PATH, filespec.getAsString(key).toString()));
       stream = (PRStream) PdfReader.getPdfObject(refs.getAsIndirectObject(key));
       fos.write(PdfReader.getStreamBytes(stream));
       fos.flush();
       fos.close();
     }
   }
   reader.close();
 }
Esempio n. 2
0
 private static String getCOName(PdfReader reader, PRIndirectReference ref) {
   String name = "";
   while (ref != null) {
     PdfObject obj = PdfReader.getPdfObject(ref);
     if (obj == null || obj.type() != PdfObject.DICTIONARY) break;
     PdfDictionary dic = (PdfDictionary) obj;
     PdfString t = dic.getAsString(PdfName.T);
     if (t != null) {
       name = t.toUnicodeString() + "." + name;
     }
     ref = (PRIndirectReference) dic.get(PdfName.PARENT);
   }
   if (name.endsWith(".")) name = name.substring(0, name.length() - 1);
   return name;
 }