public List<PdfDocumentDescriptor> load(List<PdfDocumentDescriptor> toLoad) { LOG.debug(DefaultI18nContext.getInstance().i18n("Loading documents")); List<PdfDocumentDescriptor> loaded = new ArrayList<>(toLoad.size()); for (PdfDocumentDescriptor current : toLoad) { PdfDocumentDescriptor copy = newCopy(current); PdfReader reader = null; try { reader = current.toPdfSource().open(PdfSourceOpeners.newPartialReadOpener()); copy.setEncryptionStatus(EncryptionStatus.NOT_ENCRYPTED); copy.setPages(reader.getNumberOfPages()); copy.setVersion(String.format("1.%c", reader.getPdfVersion())); @SuppressWarnings("unchecked") Map<String, String> meta = reader.getInfo(); for (PdfMetadataKey key : PdfMetadataKey.values()) { copy.addMedatada(key, defaultString(meta.get(key.getKey()))); } loaded.add(copy); } catch (TaskWrongPasswordException twpe) { copy.setEncryptionStatus(EncryptionStatus.ENCRYPTED); loaded.add(copy); LOG.warn(String.format("Owner password required %s", current.getFileName()), twpe); } catch (Exception e) { LOG.error( String.format("An error occured loading the document %s", current.getFileName()), e); } finally { nullSafeClosePdfReader(reader); } } LOG.debug(DefaultI18nContext.getInstance().i18n("Documents loaded")); return loaded; }
/* (non-Javadoc) * @see de.offis.health.icardea.cied.pdf.interfaces.PDFExtractor#getTitle() */ public String getTitle() { /* * Key = "Title" */ String title = null; if (pdfReader != null) { Map<?, ?> info = pdfReader.getInfo(); title = (String) info.get("Title"); } // end if return title; }
/* (non-Javadoc) * @see de.offis.health.icardea.cied.pdf.interfaces.PDFExtractor#getSubject() */ public String getSubject() { /* * Key = "Subject" */ String subject = null; if (pdfReader != null) { Map<?, ?> info = pdfReader.getInfo(); subject = (String) info.get("Subject"); } // end if return subject; }
/* (non-Javadoc) * @see de.offis.health.icardea.cied.pdf.interfaces.PDFExtractor#getKeywords() */ public String getKeywords() { /* * Key = "Keywords" */ String keywords = null; if (pdfReader != null) { Map<?, ?> info = pdfReader.getInfo(); keywords = (String) info.get("Keywords"); } // end if return keywords; }
/* (non-Javadoc) * @see de.offis.health.icardea.cied.pdf.interfaces.PDFExtractor#getCreator() */ public String getCreator() { /* * Key = "Creator" */ String creator = null; if (pdfReader != null) { Map<?, ?> info = pdfReader.getInfo(); creator = (String) info.get("Creator"); } // end if return creator; }
/* (non-Javadoc) * @see de.offis.health.icardea.cied.pdf.interfaces.PDFExtractor#getAuthor() */ public String getAuthor() { /* * Key = "Author" */ String author = null; if (pdfReader != null) { Map<?, ?> info = pdfReader.getInfo(); author = (String) info.get("Author"); } // end if return author; }
/* (non-Javadoc) * @see de.offis.health.icardea.cied.pdf.interfaces.PDFExtractor#getProducer() */ public String getProducer() { /* * Key = "Producer" * * Samples of format (key=value): * Producer=iText by lowagie.com (r0.94 - paulo 102) */ String producer = null; if (pdfReader != null) { Map<?, ?> info = pdfReader.getInfo(); producer = (String) info.get("Producer"); } // end if return producer; }
/* (non-Javadoc) * @see de.offis.health.icardea.cied.pdf.interfaces.PDFExtractor#getModificationDate() */ public String getModificationDate() { /* * Key = "ModDate" * * Samples of format (key=value): * ModDate=D:20100415143436Z * ModDate=D:20100415174640+02'00' */ String modificationDate = null; if (pdfReader != null) { Map<?, ?> info = pdfReader.getInfo(); // TODO: Fix the format of the date to ISO8601 timestamp modificationDate = (String) info.get("ModDate"); } // end if return modificationDate; }
/** * Reads a PDF file for retrieving its metadata. * * @param file File */ public void createTextFromPDF(File file) { if (file.exists()) { int page = 1; PdfReader reader = null; try { reader = new PdfReader(new RandomAccessFileOrArray(file.getAbsolutePath()), null); HashMap<String, String> pdfinfo = reader.getInfo(); StringBuffer sb = new StringBuffer(); sb.append("<html>=== Document Information ===<p>"); sb.append( reader.getCropBox(page).getHeight() + "*" + reader.getCropBox(page).getWidth() + "<p>"); sb.append("PDF Version: " + reader.getPdfVersion() + "<p>"); sb.append("Number of pages: " + reader.getNumberOfPages() + "<p>"); sb.append("Number of PDF objects: " + reader.getXrefSize() + "<p>"); sb.append("File length: " + reader.getFileLength() + "<p>"); sb.append("Encrypted= " + reader.isEncrypted() + "<p>"); if (pdfinfo.get("Title") != null) { sb.append("Title= " + pdfinfo.get("Title") + "<p>"); } if (pdfinfo.get("Author") != null) { sb.append("Author= " + pdfinfo.get("Author") + "<p>"); } if (pdfinfo.get("Subject") != null) { sb.append("Subject= " + pdfinfo.get("Subject") + "<p>"); } if (pdfinfo.get("Producer") != null) { sb.append("Producer= " + pdfinfo.get("Producer") + "<p>"); } if (pdfinfo.get("ModDate") != null) { sb.append("ModDate= " + PdfDate.decode(pdfinfo.get("ModDate")).getTime() + "<p>"); } if (pdfinfo.get("CreationDate") != null) { sb.append( "CreationDate= " + PdfDate.decode(pdfinfo.get("CreationDate")).getTime() + "<p>"); } sb.append("</html>"); label.setText(sb.toString()); } catch (IOException ex) { label.setText(""); } } }
/** * This method will return the key and value pairs stored in the PDF information. It's the basic * information like title, subject, author, creator, keywords, producer (meaning application) as * well as creation and modification date. The method is provided for debugging purposes. * * @return Returns <code>key=value</code> pair line by line (using system dependent newline). */ @SuppressWarnings("unused") private String getPdfInfo() { StringBuffer stringBuffer = new StringBuffer(); if (pdfReader != null) { Map<?, ?> info = pdfReader.getInfo(); String key; String value; Iterator<?> iterator = info.keySet().iterator(); while (iterator.hasNext()) { key = (String) iterator.next(); value = (String) info.get(key); stringBuffer.append(key); stringBuffer.append("="); stringBuffer.append(value); stringBuffer.append(GlobalTools.LINESEPARATOR); } // end while } // end if return stringBuffer.toString(); }