Example usage for com.itextpdf.text.pdf PdfReader getStreamBytesRaw

List of usage examples for com.itextpdf.text.pdf PdfReader getStreamBytesRaw

Introduction

In this page you can find the example usage for com.itextpdf.text.pdf PdfReader getStreamBytesRaw.

Prototype

public static byte[] getStreamBytesRaw(final PRStream stream) throws IOException 

Source Link

Document

Get the content from a stream as it is without applying any filter.

Usage

From source file:cz.muni.pdfjbim.PdfImageExtractor.java

License:Apache License

/**
 * Extracts JBIG2Images from Input stream even if they are stored together with global dictionary in separate PDF object
 * doesn't work yet, its in development stage
 * @param is//from  w w w .  j ava2 s. c  o  m
 * @throws PdfRecompressionException 
 * @deprecated 
 */
public void extractJbig2Images(InputStream is) throws PdfRecompressionException {
    if (is == null) {
        throw new IllegalArgumentException("InputStream not given");
    }

    PdfReader pdfReader = null;
    try {
        pdfReader = new PdfReader(is);

        for (int i = 0; i <= pdfReader.getNumberOfPages(); i++) {
            PdfDictionary d = pdfReader.getPageN(i);
            PdfIndirectReference ir = d.getAsIndirectObject(PdfName.CONTENTS);
            PdfObject o = pdfReader.getPdfObject(ir.getNumber());
            PdfStream stream = (PdfStream) o;
            PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE);
            if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) {
                byte[] img = PdfReader.getStreamBytesRaw((PRStream) stream);
                OutputStream out = new FileOutputStream(
                        new File("pdfRecompressor", String.format("%1$05d", i) + ".jpg"));
                out.write(img);
                out.flush();
                out.close();
            }

        }

    } catch (IOException ex) {
        log.error("IOException caught while trying to extract jbig2 images from PDF", ex);
        throw new PdfRecompressionException("IOException caught while trying to extract jbig2 images from PDF",
                ex);
    } finally {
        if (pdfReader != null) {
            pdfReader.close();
        }
    }

}

From source file:cz.muni.pdfjbim.PdfImageExtractor.java

License:Apache License

private List<Image> getImagesFromPdfDict(PdfDictionary dict, PdfReader doc) throws IOException {
    List<Image> images = new ArrayList<Image>();
    PdfDictionary res = (PdfDictionary) (PdfReader.getPdfObject(dict.get(PdfName.RESOURCES)));
    PdfDictionary xobj = (PdfDictionary) (PdfReader.getPdfObject(res.get(PdfName.XOBJECT)));

    if (xobj != null) {
        for (PdfName name : xobj.getKeys()) {
            PdfObject obj = xobj.get(name);
            if (obj.isIndirect()) {
                PdfDictionary tg = (PdfDictionary) (PdfReader.getPdfObject(obj));
                PdfName subtype = (PdfName) (PdfReader.getPdfObject(tg.get(PdfName.SUBTYPE)));
                if (PdfName.IMAGE.equals(subtype)) {
                    int xrefIdx = ((PRIndirectReference) obj).getNumber();
                    PdfObject pdfObj = doc.getPdfObject(xrefIdx);
                    PdfStream str = (PdfStream) (pdfObj);
                    byte[] bytes = PdfReader.getStreamBytesRaw((PRStream) str);

                    String filter = tg.get(PdfName.FILTER).toString();
                    String width = tg.get(PdfName.WIDTH).toString();
                    String height = tg.get(PdfName.HEIGHT).toString();
                    String bpp = tg.get(PdfName.BITSPERCOMPONENT).toString();

                    if ("/FlateDecode".equals(filter)) {
                        bytes = PdfReader.FlateDecode(bytes, true);
                        try {
                            images.add(Image.getInstance(bytes));
                        } catch (BadElementException ex) {
                            log.warn("problem to process FlatDecoded Image", ex);
                        }/* w ww.j  ava 2  s. co m*/
                    } else if (PdfName.FORM.equals(subtype) || PdfName.GROUP.equals(subtype)) {
                        images.addAll(getImagesFromPdfDict(tg, doc));
                    }
                }
            }
        }
    }
    return images;
}

From source file:org.gmdev.pdftrick.utils.CustomExtraImgReader.java

License:Open Source License

/**
 * Read a png image with if all other method fails
 * @param ref//from  w w  w.  j  ava  2 s  . c  om
 * @param resultFile
 * @return The BufferedImage obj
 * @throws IOException
 * @throws ImageReadException
 */
public static BufferedImage readIndexedPNG(int ref, String resultFile) throws IOException, ImageReadException {

    PdfReader reader = new PdfReader(resultFile);
    PRStream stream = (PRStream) reader.getPdfObject(ref);
    PdfDictionary dic = stream;
    byte[] content = PdfReader.getStreamBytesRaw(stream);

    int width = dic.getAsNumber(PdfName.WIDTH).intValue();
    int height = dic.getAsNumber(PdfName.HEIGHT).intValue();
    int pngBitDepth = dic.getAsNumber(PdfName.BITSPERCOMPONENT).intValue();

    PdfObject colorspace = dic.getDirectObject(PdfName.COLORSPACE);
    PdfArray decode = dic.getAsArray(PdfName.DECODE);
    PdfArray carray = (PdfArray) colorspace;
    PdfObject id2 = carray.getDirectObject(3);

    byte[] palette = null;
    if (id2 instanceof PdfString) {
        palette = ((PdfString) id2).getBytes();
    } else if (id2 instanceof PRStream) {
        palette = PdfReader.getStreamBytes(((PRStream) id2));
    }

    Map<PdfName, FilterHandlers.FilterHandler> handlers = new HashMap<PdfName, FilterHandlers.FilterHandler>(
            FilterHandlers.getDefaultFilterHandlers());
    byte[] imageBytes = PdfReader.decodeBytes(content, dic, handlers);

    int stride = (width * pngBitDepth + 7) / 8;
    ByteArrayOutputStream ms = new ByteArrayOutputStream();
    PngWriter png = new PngWriter(ms);

    if (decode != null) {
        if (pngBitDepth == 1) {
            // if the decode array is 1,0, then we need to invert the image
            if (decode.getAsNumber(0).intValue() == 1 && decode.getAsNumber(1).intValue() == 0) {
                int len = imageBytes.length;
                for (int t = 0; t < len; ++t) {
                    imageBytes[t] ^= 0xff;
                }
            } else {
                // if the decode array is 0,1, do nothing.  It's possible that the array could be 0,0 or 1,1 - but that would be silly, so we'll just ignore that case
            }
        } else {
            // todo: add decode transformation for other depths
        }
    }
    int pngColorType = 0;
    png.writeHeader(width, height, pngBitDepth, pngColorType);

    if (palette != null) {
        png.writePalette(palette);
    }
    png.writeData(imageBytes, stride);
    png.writeEnd();

    imageBytes = ms.toByteArray();

    InputStream in = new ByteArrayInputStream(imageBytes);
    ImageInputStream ima_stream = ImageIO.createImageInputStream(in);

    BufferedImage buffImg = null;
    BufferedImage buffPic = ImageIO.read(ima_stream);

    // check if image contains a mask image ... experimental for this type of image
    BufferedImage buffMask = null;
    PRStream maskStream = (PRStream) dic.getAsStream(PdfName.SMASK);
    if (maskStream != null) {
        PdfImageObject maskImage = new PdfImageObject(maskStream);
        buffMask = maskImage.getBufferedImage();

        Image img = PdfTrickUtils.TransformGrayToTransparency(buffMask);
        buffImg = PdfTrickUtils.ApplyTransparency(buffPic, img);
    } else {
        buffImg = buffPic;
    }

    reader.close();
    ms.close();
    in.close();
    return buffImg;
}

From source file:pdfextract.ExtractInfo.java

public void extractImagesInfo() {
    try {/*from   ww w .  jav  a  2 s. c  o m*/
        PdfReader chartReader = new PdfReader("vv.pdf");
        for (int i = 0; i < chartReader.getXrefSize(); i++) {
            PdfObject pdfobj = chartReader.getPdfObject(i);
            if (pdfobj != null && pdfobj.isStream()) {
                PdfStream stream = (PdfStream) pdfobj;
                PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE);
                //System.out.println("Stream subType: " + pdfsubtype); 
                if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) {
                    byte[] image = PdfReader.getStreamBytesRaw((PRStream) stream);
                    Image imageObject = Image.getInstance(image);
                    System.out.println("Resolution" + imageObject.getDpiX());
                    System.out.println("Height" + imageObject.getHeight());
                    System.out.println("Width" + imageObject.getWidth());

                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

}

From source file:pdfextract.ExtractInfo.java

public void imageNew() throws IOException {
    PdfReader reader;/*from w ww  . ja  va  2  s.c om*/

    File file = new File("vv.pdf");
    reader = new PdfReader(file.getAbsolutePath());
    for (int i = 0; i < reader.getXrefSize(); i++) {
        PdfObject pdfobj = reader.getPdfObject(i);
        if (pdfobj == null || !pdfobj.isStream()) {
            continue;
        }
        PdfStream stream = (PdfStream) pdfobj;
        PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE);
        if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) {
            byte[] img = PdfReader.getStreamBytesRaw((PRStream) stream);
            FileOutputStream out = new FileOutputStream(
                    new File(file.getParentFile(), String.format("%1$05d", i) + ".jpg"));
            out.write(img);
            out.flush();
            out.close();
        }
    }
}