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

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

Introduction

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

Prototype

public static byte[] FlateDecode(final byte in[], final boolean strict) 

Source Link

Document

A helper to FlateDecode.

Usage

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);
                        }/*from  w ww . j a va2 s .c  o m*/
                    } else if (PdfName.FORM.equals(subtype) || PdfName.GROUP.equals(subtype)) {
                        images.addAll(getImagesFromPdfDict(tg, doc));
                    }
                }
            }
        }
    }
    return images;
}