List of usage examples for com.lowagie.text.pdf PdfReader getPdfObject
public PdfObject getPdfObject(int idx)
From source file:com.cyberway.issue.crawler.extractor.PDFParser.java
License:Open Source License
/** * Parse a PdfDictionary, looking for URIs recursively and adding * them to foundURIs/*from w ww . j a v a2s .co m*/ * @param entity */ protected void extractURIs(PdfObject entity) { // deal with dictionaries if (entity.isDictionary()) { PdfDictionary dictionary = (PdfDictionary) entity; @SuppressWarnings("unchecked") Set<PdfName> allkeys = dictionary.getKeys(); for (PdfName key : allkeys) { PdfObject value = dictionary.get(key); // see if it's the key is a UR[I,L] if (key.toString().equals("/URI") || key.toString().equals("/URL")) { foundURIs.add(value.toString()); } else { this.extractURIs(value); } } // deal with arrays } else if (entity.isArray()) { PdfArray array = (PdfArray) entity; ArrayList arrayObjects = array.getArrayList(); Iterator objectList = arrayObjects.iterator(); while (objectList.hasNext()) { this.extractURIs((PdfObject) objectList.next()); } // deal with indirect references } else if (entity.getClass() == PRIndirectReference.class) { PRIndirectReference indirect = (PRIndirectReference) entity; // if we've already seen a reference to this object if (haveSeen(indirect.getGeneration(), indirect.getNumber())) { return; // note that we've seen it if it's new } else { markAsSeen(indirect.getGeneration(), indirect.getNumber()); } // dereference the "pointer" and process the object indirect.getReader(); // FIXME: examine side-effects PdfObject direct = PdfReader.getPdfObject(indirect); this.extractURIs(direct); } }
From source file:crawler.PDFParser.java
License:Open Source License
/** * Parse a PdfDictionary, looking for URIs recursively and adding * them to foundURIs//from ww w .j a va 2 s. c o m * @param entity */ protected void extractURIs(PdfObject entity) { // deal with dictionaries if (entity.isDictionary()) { PdfDictionary dictionary = (PdfDictionary) entity; @SuppressWarnings("unchecked") Set<PdfName> allkeys = dictionary.getKeys(); for (PdfName key : allkeys) { PdfObject value = dictionary.get(key); // see if it's the key is a UR[I,L] if (key.toString().equals("/URI") || key.toString().equals("/URL")) foundURIs.add(value.toString()); else this.extractURIs(value); } // deal with arrays } else if (entity.isArray()) { PdfArray array = (PdfArray) entity; ArrayList arrayObjects = array.getArrayList(); Iterator objectList = arrayObjects.iterator(); while (objectList.hasNext()) this.extractURIs((PdfObject) objectList.next()); // deal with indirect references } else if (entity.getClass() == PRIndirectReference.class) { PRIndirectReference indirect = (PRIndirectReference) entity; // if we've already seen a reference to this object if (haveSeen(indirect.getGeneration(), indirect.getNumber())) return; // note that we've seen it if it's new else markAsSeen(indirect.getGeneration(), indirect.getNumber()); // dereference the "pointer" and process the object indirect.getReader(); PdfObject direct = PdfReader.getPdfObject(indirect); this.extractURIs(direct); } }
From source file:de.offis.health.icardea.cied.pdf.extractor.PDFiText2Extractor.java
License:LGPL
/** * @param fullExportDirectoryPath/* ww w . j ava2 s . co m*/ * @param pdfObjectCounter * @param pdfObject * @throws IOException * @throws Exception * @throws FileNotFoundException */ private void extractImageFromPdfObjectExperimental(String fullExportDirectoryPath, int pdfObjectCounter, PdfObject pdfObject) throws IOException, Exception, FileNotFoundException { boolean rawByteArray = false; if (pdfObject != null) { if (pdfObject.isStream()) { //|| pdfObject.isDictionary()) { //PdfObject pdfObjectSubType = null; ////PdfName pdfObjectSubType = null; ////PdfStream pdfStream = null; //if (pdfObject.isStream()) { PdfStream pdfStream = (PdfStream) pdfObject; //pdfObjectSubType = pdfStream.get(PdfName.SUBTYPE); PdfName pdfObjectSubType = (PdfName) PdfReader.getPdfObject(pdfStream.get(PdfName.SUBTYPE)); // J.U. - 2011-08-22 /* } else if (pdfObject.isDictionary()) { PdfDictionary pdfDictionary = (PdfDictionary)PdfReader.getPdfObject(pdfObject); //PdfName pdfObjectSubType = (PdfName)PdfReader.getPdfObject(pdfDictionary.get(PdfName.SUBTYPE)); pdfObjectSubType = (PdfName)PdfReader.getPdfObject(pdfDictionary.get(PdfName.SUBTYPE)); if (pdfObjectSubType != null && pdfObjectSubType.toString().equals(PdfName.IMAGE.toString())) { int xRefIndex = pdfObject.getIndRef().getNumber(); PdfObject innerPdfObject = } } */ // Check PDF subtype and make sure it's an Image type if (pdfObjectSubType != null && pdfObjectSubType.toString().equals(PdfName.IMAGE.toString())) { // Now we have a PDF stream object with an image but what is that exactly? byte[] byteArrayImage = null; /* * DCTDecode isn't supported by iText2. * The image can be treated as JPEG (we have already * verified it's an image): * http://www.mail-archive.com/itext-questions@lists.sourceforge.net/msg48307.html * * Check what kind of decoding has to be applied...and * get the byte array containing the image. */ if ((pdfStream.get(PdfName.FILTER)).toString().equals(PdfName.DCTDECODE.toString())) { // Get the RAW byte array byteArrayImage = PdfReader.getStreamBytesRaw((PRStream) pdfStream); rawByteArray = true; } else { /* * PdfReader.getStreamBytes(PRStream) should * automatically apply all decoding filters. * @see com.lowagie.text.pdf.PdfReader#getStreamBytes(PRStream) */ byteArrayImage = PdfReader.getStreamBytes((PRStream) pdfStream); rawByteArray = false; } /* // Test PdfImage - START logger.trace(""); logger.trace(""); if (pdfStream instanceof PdfImage) { PdfImage pdfImage = (PdfImage) pdfStream; logger.trace(""); logger.trace("Output for pdfImage object..."); logger.trace("pdfImage --> pdfName --> Id..............: " + pdfImage.get(PdfName.ID)); logger.trace("pdfImage --> pdfName --> Image...........: " + pdfImage.get(PdfName.IMAGE)); logger.trace("pdfImage --> pdfName --> ImageB..........: " + pdfImage.get(PdfName.IMAGEB)); logger.trace("pdfImage --> pdfName --> ImageC..........: " + pdfImage.get(PdfName.IMAGEC)); logger.trace("pdfImage --> pdfName --> ImageI..........: " + pdfImage.get(PdfName.IMAGEI)); logger.trace("pdfImage --> pdfName --> Imagemask.......: " + pdfImage.get(PdfName.IMAGEMASK)); logger.trace("pdfImage --> pdfName --> Info............: " + pdfImage.get(PdfName.INFO)); logger.trace("pdfImage --> pdfName --> Name............: " + pdfImage.get(PdfName.NAME)); logger.trace("pdfImage --> pdfName --> Named...........: " + pdfImage.get(PdfName.NAMED)); } else { logger.trace("pdfStream is NO instanceof PdfImage"); } // STREAM logger.trace(""); logger.trace("Output for pdfImage object..."); logger.trace("pdfObject.toString()).....................: " + pdfObject.toString()); logger.trace("pdfObjectCounter..........................: " + pdfObjectCounter); logger.trace("pdfStream --> pdfName --> Page............: " + pdfStream. get(PdfName.PAGE)); logger.trace("pdfObject.getIndRef().getNumber().........: " + (pdfObject.getIndRef()!=null?pdfObject.getIndRef().toString():"null")); logger.trace("pdfStream.getIndRef().getNumber().........: " + (pdfStream.getIndRef()!=null?pdfStream.getIndRef().toString():"null")); logger.trace("pdfStream --> pdfName --> toString........: " + pdfStream.toString()); logger.trace("pdfStream --> pdfName --> Width...........: " + pdfStream.get(PdfName.WIDTH)); logger.trace("pdfStream --> pdfName --> Height..........: " + pdfStream.get(PdfName.HEIGHT)); logger.trace("pdfStream --> pdfName --> BitsPerComponent: " + pdfStream.get(PdfName.BITSPERCOMPONENT)); logger.trace("pdfStream --> pdfName --> BitsPerSample...: " + pdfStream.get(PdfName.BITSPERSAMPLE)); logger.trace("pdfStream --> pdfName --> ColorSpace......: " + pdfStream.get(PdfName.COLORSPACE)); logger.trace("pdfStream --> pdfName --> Filter..........: " + pdfStream.get(PdfName.FILTER)); logger.trace("pdfStream --> pdfName --> Filter - as name: " + pdfStream.getAsName(PdfName.FILTER)); logger.trace("pdfStream --> pdfName --> Name............: " + pdfStream.get(PdfName.NAME)); logger.trace("pdfStream --> pdfName --> SubType.........: " + pdfStream.get(PdfName.SUBTYPE)); */ // Extract the image name String streamImageName = (pdfStream.get(PdfName.NAME) == null ? null : pdfStream.get(PdfName.NAME).toString()); if (streamImageName != null && streamImageName.length() > 1 && streamImageName.startsWith("/")) { streamImageName = streamImageName.substring(1); } else { streamImageName = null; } // end if..else String exportFileWithoutExtension = (fullExportDirectoryPath != null ? fullExportDirectoryPath : this.fullPDFDirectoryPath) + GlobalTools.getFileNameWithoutExtension(this.fullPDFFilePath) + "_(" + "p000" + "_ref" + REF_NUMBER_FORMAT.format(pdfObjectCounter) + (streamImageName == null ? "_unk" : "_" + streamImageName) + ")"; // Test FileOutputStream fileOutputStream = null; if (rawByteArray) { fileOutputStream = new FileOutputStream(exportFileWithoutExtension + ".jpg"); fileOutputStream.write(byteArrayImage); fileOutputStream.flush(); fileOutputStream.close(); fileOutputStream = null; } else { /* * Check image details */ int pdfImageWidth = -1; int pdfImageHeight = -1; int pdfImageBitsPerComponent = -1; try { if (pdfStream.get(PdfName.BITSPERCOMPONENT).isNumber()) { pdfImageBitsPerComponent = new Integer( pdfStream.get(PdfName.BITSPERCOMPONENT).toString()).intValue(); } } catch (NumberFormatException ex) { logger.error("A NumberFormatException occurred " + "converting BITSPERCOMPONENT (w=" + pdfImageWidth + "; h=" + pdfImageHeight + "; BitsPerComponent=" + pdfImageBitsPerComponent + ".", ex); } try { if (pdfStream.get(PdfName.HEIGHT).isNumber()) { pdfImageHeight = new Integer(pdfStream.get(PdfName.HEIGHT).toString()).intValue(); } } catch (NumberFormatException ex) { logger.error("A NumberFormatException occurred " + "converting HEIGHT (w=" + pdfImageWidth + "; h=" + pdfImageHeight + "; BitsPerComponent=" + pdfImageBitsPerComponent + ".", ex); } try { if (pdfStream.get(PdfName.WIDTH).isNumber()) { pdfImageWidth = new Integer(pdfStream.get(PdfName.WIDTH).toString()).intValue(); } } catch (NumberFormatException ex) { logger.error("A NumberFormatException occurred " + "converting WIDTH (w=" + pdfImageWidth + "; h=" + pdfImageHeight + "; BitsPerComponent=" + pdfImageBitsPerComponent + ".", ex); } if (PdfName.DEVICERGB.equals(pdfStream.get(PdfName.COLORSPACE)) && pdfImageBitsPerComponent > 0 && pdfImageWidth > 0 && pdfImageHeight > 0) { BufferedImage bufferedImage = ImageProcessingTools.toBufferedImage(byteArrayImage, pdfImageWidth, pdfImageHeight, pdfImageBitsPerComponent); if (bufferedImage != null) { ImageIO.write(bufferedImage, "PNG", new FileOutputStream(exportFileWithoutExtension + "_imageIO" + ".png")); } // end if } else if (PdfName.DEVICEGRAY.equals(pdfStream.get(PdfName.COLORSPACE)) && PdfName.RUNLENGTHDECODE.equals(pdfStream.get(PdfName.FILTER)) && pdfImageBitsPerComponent > 0 && pdfImageWidth > 0) { BufferedImage bufferedImage = ImageProcessingTools.toBufferedImage( ImageProcessingTools.runLengthDecode(byteArrayImage), pdfImageWidth, 2233, pdfImageBitsPerComponent); if (bufferedImage != null) { ImageIO.write(bufferedImage, "PNG", new FileOutputStream(exportFileWithoutExtension + "_imageIO" + ".png")); } // end if } else { logger.error("Unsupported Image format or missing information to convert the image."); } // end if..else } } // end if } // end if } // end if }
From source file:de.offis.health.icardea.cied.pdf.extractor.PDFiText2Extractor.java
License:LGPL
public ArrayList<byte[]> getImages(int pageNumber) throws Exception { ArrayList<byte[]> arrayListPageImages = new ArrayList<byte[]>(); if (pdfReader != null) { int numberOfPages = pdfReader.getNumberOfPages(); if (pageNumber > 0 && pageNumber <= numberOfPages) { PdfDictionary pdfDictionary = pdfReader.getPageN(pageNumber); if (pdfDictionary != null) { //PdfDictionary pdfDictionaryResources = (PdfDictionary)pdfDictionary.get(PdfName.RESOURCES); PdfDictionary pdfDictionaryResources = (PdfDictionary) PdfReader .getPdfObject(pdfDictionary.get(PdfName.RESOURCES)); PdfDictionary pdfDictionaryXObjects = (PdfDictionary) pdfDictionaryResources .get(PdfName.XOBJECT); if (pdfDictionaryXObjects != null) { //Set myKeySet = ; //pdfDictionaryXObjects.getKeys(). PdfName pdfObjectSubType = null; for (Object pdfKeyObject : pdfDictionaryXObjects.getKeys()) { PdfObject pdfObject = pdfDictionaryXObjects.get((PdfName) pdfKeyObject); if (pdfObject.isIndirect()) { // Eventually check if pdfObject.isDictionary()...we skipped that here PdfDictionary innerPdfDictionary = (PdfDictionary) PdfReader .getPdfObject(pdfObject); if (innerPdfDictionary.isStream()) { extractImageFromPdfObjectExperimental(null, pageNumber, innerPdfDictionary); } else { //PdfName pdfObjectSubType = (PdfName)PdfReader.getPdfObject(innerPdfDictionary.get(PdfName.SUBTYPE)); pdfObjectSubType = (PdfName) PdfReader .getPdfObject(innerPdfDictionary.get(PdfName.SUBTYPE)); /* * Check if the sub-type is an "IMAGE" and * then get the actual innerPdfObject for * the image extraction code */ if (PdfName.IMAGE.equals(pdfObjectSubType)) { PdfObject innerPdfObject = pdfReader .getPdfObject(pdfObject.getIndRef().getNumber()); extractImageFromPdfObjectExperimental(null, pageNumber, innerPdfObject); }/*from w w w. j a va 2 s . c o m*/ } } // end if checking 'pdfObject' is indirect } // end for } // end if checking 'XObject' } // end if checking 'PdfDictionary' } // end if checking page number } else { // TODO: Add own exception. throw new Exception("There is no open PDF to work with."); } // end if..else return arrayListPageImages; }
From source file:es.gob.afirma.signers.pades.ltv.PdfDocumentSecurityStore.java
License:Open Source License
/** Constructor para inicializar la clase con una estructura DSS ya creada. * @param dss Diccionario DSS//from w ww . j a v a 2 s . c o m * @throws IOException En caso de errores de entrada / salida */ PdfDocumentSecurityStore(final PdfDictionary dss) throws IOException { int i = 0; PdfArray arrayCerts = dss.getAsArray(new PdfName(PDF_NAME_CERTS)); if (arrayCerts != null) { for (final Iterator<PdfObject> iterator = arrayCerts.listIterator(); iterator.hasNext();) { final PdfIndirectReference reference = (PdfIndirectReference) iterator.next(); this.certificates.put(Integer.valueOf(i), getContentBytesFromContentObject(PdfReader.getPdfObject(reference))); i++; } } PdfArray arrayOcsps = dss.getAsArray(new PdfName(PDF_NAME_OCSPS)); if (arrayOcsps != null) { i = 0; for (final Iterator<PdfObject> iterator = arrayOcsps.listIterator(); iterator.hasNext();) { final PdfIndirectReference reference = (PdfIndirectReference) iterator.next(); this.ocsps.put(Integer.valueOf(i), getContentBytesFromContentObject(PdfReader.getPdfObject(reference))); i++; } } PdfArray arrayCrls = dss.getAsArray(new PdfName(PDF_NAME_CRLS)); if (arrayCrls != null) { i = 0; for (final Iterator<PdfObject> iterator = arrayCrls.listIterator(); iterator.hasNext();) { final PdfIndirectReference reference = (PdfIndirectReference) iterator.next(); this.crls.put(Integer.valueOf(i), getContentBytesFromContentObject(PdfReader.getPdfObject(reference))); i++; } } final PdfDictionary vri = dss.getAsDict(new PdfName(PDF_NAME_VRI)); if (vri != null) { PdfName key; ValidationInformation val; for (final Iterator<PdfName> iterator = vri.getKeys().iterator(); iterator.hasNext(); this.signatures .put(key.toString().substring(1), val)) { key = iterator.next(); final PdfDictionary vriEntry = vri.getAsDict(key); arrayCerts = vriEntry.getAsArray(new PdfName(PDF_NAME_CERT)); int certId[]; if (arrayCerts != null) { certId = new int[arrayCerts.size()]; for (i = 0; i < arrayCerts.size(); i++) { final PdfIndirectReference reference = (PdfIndirectReference) arrayCerts.getPdfObject(i); final byte referenceBytes[] = getContentBytesFromContentObject( PdfReader.getPdfObject(reference)); final Iterator<Integer> iteratorKeys = this.certificates.keySet().iterator(); do { if (!iteratorKeys.hasNext()) { break; } final int index = iteratorKeys.next().intValue(); if (Arrays.equals(referenceBytes, this.certificates.get(Integer.valueOf(index)))) { certId[i] = index; } } while (true); } } else { certId = new int[0]; } arrayOcsps = vriEntry.getAsArray(new PdfName(PDF_NAME_OCSP)); int ocspId[]; if (arrayOcsps != null) { ocspId = new int[arrayOcsps.size()]; i = 0; for (final Iterator<PdfObject> iteratorOcsps = arrayOcsps.listIterator(); iteratorOcsps .hasNext();) { final PdfIndirectReference reference = (PdfIndirectReference) iteratorOcsps.next(); final byte referenceBytes[] = getContentBytesFromContentObject( PdfReader.getPdfObject(reference)); final Iterator<Integer> iteratorKeys = this.ocsps.keySet().iterator(); do { if (!iteratorKeys.hasNext()) { break; } final int index = iteratorKeys.next().intValue(); if (Arrays.equals(referenceBytes, this.ocsps.get(Integer.valueOf(index)))) { ocspId[i] = index; } } while (true); i++; } } else { ocspId = new int[0]; } arrayCrls = vriEntry.getAsArray(new PdfName(PDF_NAME_CRL)); int crlId[]; if (arrayCrls != null) { crlId = new int[arrayCrls.size()]; i = 0; for (final Iterator<PdfObject> iteratorCRLs = arrayCrls.listIterator(); iteratorCRLs .hasNext();) { final PdfIndirectReference reference = (PdfIndirectReference) iteratorCRLs.next(); final byte referenceBytes[] = getContentBytesFromContentObject( PdfReader.getPdfObject(reference)); final Iterator<Integer> iteratorKeys = this.crls.keySet().iterator(); do { if (!iteratorKeys.hasNext()) { break; } final int index = iteratorKeys.next().intValue(); if (Arrays.equals(referenceBytes, this.crls.get(Integer.valueOf(index)))) { crlId[i] = index; } } while (true); i++; } } else { crlId = new int[0]; } Calendar date = null; if (vriEntry.get(PdfName.TU) != null) { if (vriEntry.get(PdfName.TU) instanceof PdfDate) { date = PdfDate.decode(((PdfDate) vriEntry.get(PdfName.TU)).getEncoding()); } if (vriEntry.get(PdfName.TU) instanceof PdfString) { date = PdfDate.decode(vriEntry.getAsString(PdfName.TU).getEncoding()); } } val = new ValidationInformation(key, certId, ocspId, crlId, date); } } }
From source file:es.gob.afirma.signers.pades.ltv.PdfDocumentSecurityStore.java
License:Open Source License
private static byte[] getContentBytesFromContentObject(final PdfObject contentObject) throws IOException { switch (contentObject.type()) { case PdfObject.INDIRECT: return getContentBytesFromContentObject(PdfReader.getPdfObject(contentObject)); case PdfObject.STREAM: return PdfReader.getStreamBytes((PRStream) PdfReader.getPdfObject(contentObject)); case PdfObject.ARRAY: final ByteArrayOutputStream allBytes = new ByteArrayOutputStream(); final ListIterator<PdfObject> iter = ((PdfArray) contentObject).listIterator(); while (iter.hasNext()) { allBytes.write(getContentBytesFromContentObject(iter.next())); allBytes.write((byte) ' '); }//from w w w. j av a 2 s . com return allBytes.toByteArray(); default: throw new IllegalStateException("No se soporta contenido del tipo: " + contentObject.getClass()); //$NON-NLS-1$ } }
From source file:eu.europa.cedefop.europass.jtool.util.ExtractAttachments.java
License:EUPL
/** * Extract the attachment file//from w ww.j a v a2s.c o m * @throws Exception */ public void execute() throws Exception { boolean hasAttachment = false; try { PdfReader reader = new PdfReader(in); PdfDictionary catalog = reader.getCatalog(); PdfDictionary names = (PdfDictionary) PdfReader.getPdfObject(catalog.get(PdfName.NAMES)); if (names != null) { PdfDictionary embFiles = (PdfDictionary) PdfReader .getPdfObject(names.get(new PdfName("EmbeddedFiles"))); if (embFiles != null) { HashMap embMap = PdfNameTree.readTree(embFiles); for (Iterator i = embMap.values().iterator(); i.hasNext();) { PdfDictionary filespec = (PdfDictionary) PdfReader.getPdfObject((PdfObject) i.next()); unpackFile(filespec); } } } for (int k = 1; k <= reader.getNumberOfPages(); ++k) { PdfArray annots = (PdfArray) PdfReader.getPdfObject(reader.getPageN(k).get(PdfName.ANNOTS)); if (annots == null) continue; for (Iterator i = annots.listIterator(); i.hasNext();) { PdfDictionary annot = (PdfDictionary) PdfReader.getPdfObject((PdfObject) i.next()); PdfName subType = (PdfName) PdfReader.getPdfObject(annot.get(PdfName.SUBTYPE)); if (!PdfName.FILEATTACHMENT.equals(subType)) continue; PdfDictionary filespec = (PdfDictionary) PdfReader.getPdfObject(annot.get(PdfName.FS)); hasAttachment = true; unpackFile(filespec); } } } catch (Exception e) { log.error("Error while extracting PDF attachements: " + e); } if (!hasAttachment) throw new Exception("PDF file does not have attachment."); }
From source file:eu.europa.cedefop.europass.jtool.util.ExtractAttachments.java
License:EUPL
/** * Get the attachment file /*from w w w.j a v a2s . co m*/ * @param filespec * @throws IOException */ public void unpackFile(PdfDictionary filespec) throws IOException { if (filespec == null) return; PdfName type = (PdfName) PdfReader.getPdfObject(filespec.get(PdfName.TYPE)); if (!PdfName.F.equals(type) && !PdfName.FILESPEC.equals(type)) return; PdfDictionary ef = (PdfDictionary) PdfReader.getPdfObject(filespec.get(PdfName.EF)); if (ef == null) return; PdfString fn = (PdfString) PdfReader.getPdfObject(filespec.get(PdfName.F)); if (fn == null) return; PRStream prs = (PRStream) PdfReader.getPdfObject(ef.get(PdfName.F)); if (prs == null) return; byte b[] = PdfReader.getStreamBytes(prs); FileOutputStream fout = new FileOutputStream(trgfile); fout.write(b); fout.close(); }
From source file:ispyb.common.util.PDFFormFiller.java
License:Open Source License
/** * Render and finalize the PDF form filled with data * /* w w w .j a v a2 s . c o m*/ * @throws Exception */ public void render() throws Exception { // This is mandatory not to have the "Expected a dict object" // message when the result ouput is openned!!! PdfDictionary pdfDictionary = (PdfDictionary) PdfReader .getPdfObject(this.reader.getCatalog().get(PdfName.ACROFORM)); pdfDictionary.remove(new PdfName("XFA")); // /////////////////////////////////////////////////////////// if (this.stamper != null) { this.stamper.setFormFlattening(true); this.stamper.close(); this.stamper = null; } if (this.reader != null) { this.reader.close(); this.reader = null; } if (this.writer != null) { if (!this.writer.isCloseStream()) this.writer.close(); this.writer = null; } this.formFields = null; }
From source file:it.flavianopetrocchi.jpdfbookmarks.itextbookmarksconverter.iTextBookmarksConverter.java
License:Open Source License
private void setActionInBookmark(Bookmark bookmark, PdfDictionary action) { PdfObject dest;//from w ww.jav a 2 s . c o m if (PdfName.GOTO.equals(PdfReader.getPdfObjectRelease(action.get(PdfName.S)))) { dest = PdfReader.getPdfObjectRelease(action.get(PdfName.D)); if (dest != null) { mapGotoBookmark(bookmark, dest); } } else if (PdfName.URI.equals(PdfReader.getPdfObjectRelease(action.get(PdfName.S)))) { bookmark.setType(BookmarkType.Uri); bookmark.setUri(((PdfString) PdfReader.getPdfObjectRelease(action.get(PdfName.URI))).toUnicodeString()); } else if (PdfName.GOTOR.equals(PdfReader.getPdfObjectRelease(action.get(PdfName.S)))) { bookmark.setRemoteDestination(true); PdfObject file = PdfReader.getPdfObjectRelease(action.get(PdfName.F)); if (file != null) { if (file.isString()) { String path = Ut.onWindowsReplaceBackslashWithSlash(((PdfString) file).toUnicodeString()); bookmark.setRemoteFilePath(path); } else if (file.isDictionary()) { file = PdfReader.getPdfObject(((PdfDictionary) file).get(PdfName.F)); if (file.isString()) { bookmark.setRemoteFilePath(((PdfString) file).toUnicodeString()); } } } dest = PdfReader.getPdfObjectRelease(action.get(PdfName.D)); if (dest != null) { if (dest.isString()) { bookmark.setNamedDestination(dest.toString()); } else if (dest.isName()) { bookmark.setNamedDestination(PdfName.decodeName(dest.toString())); bookmark.setNamedAsName(true); } else if (dest.isArray()) { PdfArray arr = (PdfArray) dest; PdfReader remoteReader; try { // File remoteFile = new File(bookmark.getRemoteFilePath()); // if (!remoteFile.isAbsolute()) { // File openedFile = new File(filePath); // String containingFolder = openedFile.getParent(); // String remotePath = containingFolder + File.separator + bookmark.getRemoteFilePath(); // remoteFile = new File(remotePath); // } File remoteFile = Ut.createAbsolutePath(new File(filePath), new File(bookmark.getRemoteFilePath())); remoteReader = new PdfReader(remoteFile.getCanonicalPath()); makeBookmarkParam(remoteReader, bookmark, arr, null); remoteReader.close(); } catch (IOException ex) { //System.out.println(ex.getMessage()); } finally { } } } PdfObject newWindow = PdfReader.getPdfObjectRelease(action.get(PdfName.NEWWINDOW)); if (newWindow != null) { bookmark.setNewWindow(((PdfBoolean) newWindow).booleanValue()); } } else if (PdfName.LAUNCH.equals(PdfReader.getPdfObjectRelease(action.get(PdfName.S)))) { bookmark.setType(BookmarkType.Launch); PdfObject file = PdfReader.getPdfObjectRelease(action.get(PdfName.F)); if (file == null) { file = PdfReader.getPdfObjectRelease(action.get(PdfName.WIN)); } if (file != null) { if (file.isString()) { bookmark.setFileToLaunch(((PdfString) file).toUnicodeString()); } else if (file.isDictionary()) { file = PdfReader.getPdfObjectRelease(((PdfDictionary) file).get(PdfName.F)); if (file.isString()) { bookmark.setFileToLaunch(((PdfString) file).toUnicodeString()); } } } } else if (PdfName.HIDE.equals(PdfReader.getPdfObjectRelease(action.get(PdfName.S)))) { bookmark.setType(BookmarkType.Hide); PdfObject annotation = PdfReader.getPdfObjectRelease(action.get(PdfName.T)); if (annotation != null) { if (annotation.isDictionary()) { } else if (annotation.isArray()) { } else if (annotation.isString()) { bookmark.setFieldNameToHide(((PdfString) annotation).toUnicodeString()); } } PdfBoolean hide = (PdfBoolean) PdfReader.getPdfObjectRelease(action.get(PdfName.H)); if (hide != null) { bookmark.setHide(hide.booleanValue()); } } else { bookmark.setType(BookmarkType.Unknown); } }