List of usage examples for com.lowagie.text.pdf PdfName DCTDECODE
PdfName DCTDECODE
To view the source code for com.lowagie.text.pdf PdfName DCTDECODE.
Click Source Link
From source file:de.offis.health.icardea.cied.pdf.extractor.PDFiText2Extractor.java
License:LGPL
/** * @param fullExportDirectoryPath//w w w . j a va2s . c o m * @param pdfObjectCounter * @param pdfObject * @throws IOException * @throws Exception * @throws FileNotFoundException */ private void extractImageFromPdfObject(String fullExportDirectoryPath, int pdfObjectCounter, PdfObject pdfObject) throws IOException, Exception, FileNotFoundException { boolean rawByteArray = false; if (pdfObject != null) { if (pdfObject.isStream()) { PdfStream pdfStream = (PdfStream) pdfObject; PdfObject pdfObjectSubType = pdfStream.get(PdfName.SUBTYPE); // 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
/** * @param fullExportDirectoryPath//from w w w. j a va2 s .c o 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:questions.images.ResizeImage.java
public static void resizeImagesInPage(PdfReader reader, int page, float factor) throws IOException { PdfDictionary pageDictionary = reader.getPageN(page); PdfDictionary resources = (PdfDictionary) PdfReader.getPdfObject(pageDictionary.get(PdfName.RESOURCES)); PdfDictionary xobjects = (PdfDictionary) PdfReader.getPdfObject(resources.get(PdfName.XOBJECT)); if (xobjects != null) { for (Object xObjectKey : xobjects.getKeys()) { PdfName xobjectName = (PdfName) xObjectKey; PdfObject xobj = xobjects.get(xobjectName); PRStream imageStream = (PRStream) PdfReader.getPdfObject(xobj); PdfName subtype = (PdfName) PdfReader.getPdfObject(imageStream.get(PdfName.SUBTYPE)); PdfName filter = (PdfName) PdfReader.getPdfObject(imageStream.get(PdfName.FILTER)); if (PdfName.IMAGE.equals(subtype) && PdfName.DCTDECODE.equals(filter)) { BufferedImage src = ImageIO .read(new ByteArrayInputStream(PdfReader.getStreamBytesRaw(imageStream))); int width = (int) (src.getWidth() * factor); int height = (int) (src.getHeight() * factor); BufferedImage dest = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); AffineTransform at = AffineTransform.getScaleInstance(factor, factor); Graphics2D g = dest.createGraphics(); g.drawRenderedImage(src, at); ByteArrayOutputStream newImage = new ByteArrayOutputStream(); ImageIO.write(dest, "JPG", newImage); imageStream.setData(newImage.toByteArray(), false, PRStream.NO_COMPRESSION); imageStream.put(PdfName.WIDTH, new PdfNumber(width)); imageStream.put(PdfName.HEIGHT, new PdfNumber(height)); imageStream.put(PdfName.FILTER, PdfName.DCTDECODE); }/* www .j a va 2 s. co m*/ } } }