在 iText 5 的帮助下,我想从给定的 PDF 文件中提取所有 TIFF 图像并将它们保存为 TIFF 文件。 示例和其他帖子(1,2)使用以下方法:
PdfImageObject
,它在 line 189 解码图像流(如果存在相应的过滤器实现)。PdfImageObject#getImageAsBytes()
返回 JPEG(原始)、PNG(重新编码)或 TIFF(在每像素 8 位的情况下)。结果 1 位色深的 TIFF 图像被转换为 PNG,这不是我需要的。
另一种方法是调用
PdfImageObject#getBufferedImage()
,它将在步骤 (2) 中将图像解码为光栅,然后使用 ImageIO.write(bufferedImage, "tiff", file)
再次将其编码为 TIFF。
可以看出这是没有效率的。 这篇文章 中显示的另一个解决方案演示了如何通过在其前面添加 TIFF 标头来将编码的 TIFF 图像流保存到文件中——这就是我正在寻找的解决方案。
iText 可以提供帮助吗?
到目前为止,最简单的方法是从任何最近的 poppler utils 包中取出操作系统并使用 pdfimages
对于 Windows,它们位于 https://github.com/oschwartz10612/poppler-windows
其他版本可能有不同的输出能力。
poppler/bin>
pdfimages -tiff in.pdf out
这将(/应该)使用
out-000.tif etc
等名称将所有图像提取为 colour.tif 或 mono.tif,但请注意,单色蒙版看起来颠倒是正常的,因为这通常是它们存储在 PDF 中的方式,
此外,单声道 tiff 将按照相对密度的要求进行处理,因此纸上标称 300 dpi 分辨率的源将导出为单声道未压缩 tiff,PDF 密度为 72dpi。相同数量的像素,因此看起来规模更大
PDF 图像是not TIFF 图像。
PDF 但是可以包含使用压缩技术的图像,也 在 TIFF 中使用,例如Flate、CCITT、LZW、JPEG.