List of usage examples for com.itextpdf.text.pdf.parser ImageRenderInfo getRef
public PdfIndirectReference getRef()
From source file:com.github.naofum.epubconverter.ReadPdf.java
License:Open Source License
public void renderImage(ImageRenderInfo renderInfo) { try {//w ww.java2s. c o m // Get image PdfImageObject image = renderInfo.getImage(); if (image != null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); baos.write(image.getImageAsBytes()); baos.flush(); baos.close(); // Check image type String imageType = image.getFileType(); if (imageType == "png" || imageType == "gif" || imageType == "jpg") { if (imageType == "jpg") { imageType = "jpeg"; } // Save to ePUB String imageName = String.format("image%s.%s", renderInfo.getRef().getNumber(), imageType); if (!WriteZip.addImage("OEBPS/" + imageName, baos.toByteArray())) { ReadPdf.imageList.add(imageName); } } } } catch (IOException e) { System.err.println("Failed to extract image (renderListener) " + e.getMessage()); } catch (OutOfMemoryError e) { System.err.println("Out of memory in image extraction (renderListener) " + e.getMessage()); } }
From source file:cz.muni.pdfjbim.pdf.MyImageRenderListener.java
License:Apache License
/** * @see com.itextpdf.text.pdf.parser.RenderListener#renderImage( * com.itextpdf.text.pdf.parser.ImageRenderInfo) *///from w w w . j a v a2s. com public void renderImage(ImageRenderInfo renderInfo) { try { String filename; PdfImageObject image = renderInfo.getImage(); if (image == null) { return; } filename = String.format(path, renderInfo.getRef().getNumber(), image.getFileType()); try (FileOutputStream os = new FileOutputStream(filename)) { os.write(image.getImageAsBytes()); os.flush(); } catch (IOException ex) { log.warn("IOException occurred when storing image object to file"); } } catch (IOException e) { log.warn("IOException occurred when rendering pdf image object", e); } }
From source file:javaapplication1.ImageRenderListener.java
/** * @see com.itextpdf.text.pdf.parser.RenderListener#renderImage( * com.itextpdf.text.pdf.parser.ImageRenderInfo) */// w ww . j a v a2 s. c om @Override public void renderImage(ImageRenderInfo renderInfo) { try { PdfImageObject image = renderInfo.getImage(); if (image == null) { return; } if (renderInfo.getRef().getNumber() == 16) { img = image.getImageAsBytes(); } } catch (IOException e) { Logger.getLogger(ImageRenderListener.class.getName()).log(Level.SEVERE, null, e); } }
From source file:mkl.testarea.itext5.pdfcleanup.PdfCleanUpRenderListener.java
License:Open Source License
public void renderImage(ImageRenderInfo renderInfo) { List<Rectangle> areasToBeCleaned = getImageAreasToBeCleaned(renderInfo); if (areasToBeCleaned == null) { chunks.add(new PdfCleanUpContentChunk.Image(false, null)); } else {//w ww . j av a2 s . co m try { PdfImageObject pdfImage = renderInfo.getImage(); byte[] imageBytes = processImage(pdfImage.getImageAsBytes(), areasToBeCleaned); if (renderInfo.getRef() == null && pdfImage != null) { // true => inline image PdfDictionary dict = pdfImage.getDictionary(); PdfObject imageMask = dict.get(PdfName.IMAGEMASK); Image image = Image.getInstance(imageBytes); if (imageMask == null) { imageMask = dict.get(PdfName.IM); } if (imageMask != null && imageMask.equals(PdfBoolean.PDFTRUE)) { image.makeMask(); } PdfContentByte canvas = getContext().getCanvas(); canvas.addImage(image, 1, 0, 0, 1, 0, 0, true); } else if (pdfImage != null && imageBytes != pdfImage.getImageAsBytes()) { chunks.add(new PdfCleanUpContentChunk.Image(true, imageBytes)); } } catch (Exception e) { throw new RuntimeException(e); } } }
From source file:org.gmdev.pdftrick.engine.ImageListenerShowThumb.java
License:Open Source License
/** * extracts the images contained in selected page and convert it in a BufferedImage to add and show to the center panel. * @param renderInfo/* ww w. j a v a 2s .c om*/ */ private void render(ImageRenderInfo renderInfo) { final HashMap<Integer, String> rotationFromPages = factory.getRotationFromPages(); boolean isInline = false; PdfImageObject image = null; try { BufferedImage buffImg = null; if (renderInfo.getRef() == null) { isInline = true; inlineImageCounter += 1; } try { image = renderInfo.getImage(); } catch (UnsupportedPdfException updfe) { try { if (isInline) { buffImg = null; } else { buffImg = CustomExtraImgReader.readIndexedPNG(renderInfo.getRef().getNumber(), factory.getResultFile()); } } catch (Exception e) { logger.error("Exception", e); PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG); unsupportedImage++; return; } } if (image != null) { BufferedImage buffPic = null; try { // if image is JBIG2 type i need a custom way and using jbig2 ImageIO plugin if (image.getFileType().equalsIgnoreCase("JBIG2")) { buffPic = CustomExtraImgReader.readJBIG2(image); } else { buffPic = image.getBufferedImage(); } } catch (IIOException iioex) { byte[] imageByteArray = image.getImageAsBytes(); try { buffPic = CustomExtraImgReader.readCMYK_JPG(imageByteArray); } catch (Exception e) { logger.error("Exception", e); PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG); unsupportedImage++; return; } } catch (Exception e) { logger.error("Exception", e); PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG); unsupportedImage++; return; } // check if image contains a mask image BufferedImage buffMask = null; PdfDictionary imageDictionary = image.getDictionary(); PRStream maskStream = (PRStream) imageDictionary.getAsStream(PdfName.SMASK); if (maskStream != null) { // if i have an smak object i check that is not a jpeg format, because this may cause some problem on offscreen rendering // usually all imges with mask are png ... and there aren't problems, if image is jpg i discard the mask :) if (!image.getFileType().equalsIgnoreCase("jpg") && buffPic != null) { PdfImageObject maskImage = new PdfImageObject(maskStream); buffMask = maskImage.getBufferedImage(); Image img = PdfTrickUtils.TransformGrayToTransparency(buffMask); buffImg = PdfTrickUtils.ApplyTransparency(buffPic, img); } else { buffImg = buffPic; } } else { buffImg = buffPic; } } String flip = ""; String rotate = ""; Matrix matrix = renderInfo.getImageCTM(); String angle = "" + rotationFromPages.get(numPage); // experimental float i11 = matrix.get(Matrix.I11); // if negative -> horizontal flip float i12 = matrix.get(Matrix.I12); // if negative -> 90 degree rotation float i21 = matrix.get(Matrix.I21); // if negative -> 270 degree rotation float i22 = matrix.get(Matrix.I22); // if negative -> vertical flip // flip and rotation ... from matrix if i11 or i22 is negative i have to flip image if (("" + i11).charAt(0) == '-') { flip = "fh"; } else if (("" + i22).charAt(0) == '-') { flip = "fv"; } if (angle.equalsIgnoreCase("270") || ("" + i21).charAt(0) == '-') { rotate = "270"; } else if (angle.equalsIgnoreCase("180")) { rotate = "180"; } else if (angle.equalsIgnoreCase("90") || ("" + i12).charAt(0) == '-') { rotate = "90"; } if (buffImg != null) { buffImg = PdfTrickUtils.adjustImage(buffImg, flip, rotate); RenderedImageAttributes imageAttrs = null; if (isInline) { // set up inline image object attributes and store it in a hashmap InlineImage inImg = new InlineImage(buffImg, image != null ? image.getFileType() : "png"); imageAttrs = new RenderedImageInline(inlineImageCounter, inImg, numPage, flip, rotate); } else { // set up image object for normal images imageAttrs = new RenderedImageNormal(numPage, renderInfo.getRef().getNumber(), flip, rotate); } // scaling image with original aspect ratio (if image exceded pic box) int w = buffImg.getWidth(); int h = buffImg.getHeight(); if (w > 170 || h > 170) { double faktor; if (w > h) { faktor = 160 / (double) w; int scaledW = (int) Math.round(faktor * w); int scaledH = (int) Math.round(faktor * h); buffImg = PdfTrickUtils.getScaledImagWithScalr(buffImg, scaledW, scaledH); } else { faktor = 160 / (double) h; int scaledW = (int) Math.round(faktor * w); int scaledH = (int) Math.round(faktor * h); buffImg = PdfTrickUtils.getScaledImagWithScalr(buffImg, scaledW, scaledH); } } numImg++; // dynamic update on the center panel (under EDT thread). UpdatePanelCenter upPcenter = this.upPcenter; upPcenter.setInlineImg(isInline); upPcenter.setBuffImg(buffImg); upPcenter.setImageAttrs(imageAttrs); try { SwingUtilities.invokeAndWait(upPcenter); } catch (InterruptedException e) { logger.error("Exception", e); } catch (InvocationTargetException e) { logger.error("Exception", e); } buffImg.flush(); } else { unsupportedImage++; } } catch (IOException e) { logger.error("Exception", e); PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG); unsupportedImage++; } catch (Exception e) { logger.error("Exception", e); PdfTrickMessages.append("ERROR", Consts.SENDLOG_MSG); unsupportedImage++; } }
From source file:pdfextract.ImageRenderListener.java
public void renderImage(ImageRenderInfo renderInfo) { try {//w ww .ja va 2 s . co m PdfImageObject image = renderInfo.getImage(); if (image == null) return; int number = renderInfo.getRef() != null ? renderInfo.getRef().getNumber() : counter++; String filename = String.format("%s-%s.%s", name, number, image.getFileType()); FileOutputStream os = new FileOutputStream(filename); os.write(image.getImageAsBytes()); os.flush(); os.close(); PdfDictionary imageDictionary = image.getDictionary(); PRStream maskStream = (PRStream) imageDictionary.getAsStream(PdfName.SMASK); if (maskStream != null) { PdfImageObject maskImage = new PdfImageObject(maskStream); filename = String.format("%s-%s-mask.%s", name, number, maskImage.getFileType()); os = new FileOutputStream(filename); os.write(maskImage.getImageAsBytes()); os.flush(); os.close(); } } catch (IOException e) { e.printStackTrace(); } }