Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extract TIFF images from PDF without decoding

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:

  1. Create PdfImageObject from PDF stream which in line 189 decodes the image stream (if corresponding filter implementation is present).
  2. Call 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?

like image 444
dma_k Avatar asked Dec 11 '25 15:12

dma_k


1 Answers

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

enter image description here enter image description here

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.

enter image description here

like image 108
K J Avatar answered Dec 13 '25 03:12

K J



Donate For Us

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