With the help of iText 5 I would like to extract all TIFF images from given PDF file and save them as TIFF files. Examples and other posts (1, 2) use the following method:
PdfImageObject from PDF stream which in line 189 decodes the image stream (if corresponding filter implementation is present).PdfImageObject#getImageAsBytes() which returns JPEG (original), PNG (re-encoded) or TIFF (in case of 8 bits per pixel).As a result TIFF image with 1 bit color depth is converted to PNG, which is not what I need.
Another approach would be to call PdfImageObject#getBufferedImage() which will decode the image in step (2) into raster and afterwards encode it again as TIFF using ImageIO.write(bufferedImage, "tiff", file).
As one can see this is not efficient. Another solution shown in this post demonstrates how to save encoded TIFF image stream to file by prepending it a TIFF header – that is the solution I am looking for.
Can iText help here?
By far the simplest is to shell out to the OS and use (Debian manual)pdfimages from any recent poppler utils package
For windows they are at https://github.com/oschwartz10612/poppler-windows
other versions may have different output abilities.
poppler/bin> pdfimages -tiff in.pdf out
This will (/should) extract all images as colour.tif or mono.tif using names such as out-000.tif etc however note it is normal for single colour masks to look reversed as that's often how they are stored in a PDF

Also the Mono tiff will be as requested at a comparative density so a source at nominal 300 dpi resolution on paper will export as lossless mono uncompressed tiff with a PDF nominal density of 72dpi. Exactly correct number of pixels, however appear to be larger in scale, and seem to be different colour.

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With