List of usage examples for com.itextpdf.text.pdf PdfReader FlateDecode
public static byte[] FlateDecode(final byte in[], final boolean strict)
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; }