Example usage for com.itextpdf.text.pdf.parser ImageRenderInfo getRef

List of usage examples for com.itextpdf.text.pdf.parser ImageRenderInfo getRef

Introduction

In this page you can find the example usage for com.itextpdf.text.pdf.parser ImageRenderInfo getRef.

Prototype

public PdfIndirectReference getRef() 

Source Link

Usage

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();
    }
}