常见的 PDF 有两种,一种是文字版 PDF,是矢量的,这种 PDF 在使用上可以无限放大,都不影响清晰度;另一种是扫描版/图片版PDF,是由纯图片生成的,PDF 中的每页的构成元素就是一张大图(当然也有可能OCR加了文字层),就是普通的图片,和在图片浏览器中看图基本是一样的。
(一)从 PDF 导出图片
1.文字版 PDF
文字版PDF尽管使用很方便,但有时候我们也想把它转换成静态图片导出来,做成词典或重新封装成图片版PDF来防篡改。
文字版 PDF 要导出成图片,需要经过一道转换,按我的理解是“打印法”——也就是先按某一分辨率渲染再按像素点转换成图片,自然这种方法一定是“有损”的。
对于文字版PDF转图片,各种导出工具都差不多,没什么特别的,导出的图像质量主要取决于 DPI 参数,也就是渲染的分辨率高低。
2.图片版 PDF
图片版 PDF 由于每页中的元素直接就是图片,因此要导出图片很简单,就是把它们“提取”出来,这也正是图片版 PDF 导出图片的最佳方法,因为没有经过转换过程所以是可以达到无损的。
当然图片版 PDF 同样也可以按“打印法”的方式导出图片,这样导出的图片就不是原来的图片了,是有损的,图片质量大概率下降,但也有可能保持原来差不多的清晰度,那就是尽量加大导出图片的 DPI,只要超过原图的 DPI,那就可能保持原来的清晰度,但这带来的后果会是导出的图片体积大幅膨胀(可以做二值化等二次加工来重新降体积)。
所以,对于扫描版/图片版PDF,建议优先使用“提取”的方法。提取还原图片的过程中可能还会经历解压缩过程(生成PDF时有压缩图片减小文件体积),主要是 png/tiff 格式的图片,jpg/jpeg 一般则不需要解压缩直接提取。最常见的两种无损压缩算法分别是 CCITT G4 和 JBig2,其中 JBig2 对于黑白图片的压缩率很高,因此常用在扫描版 PDF 中,它是 Adobe 的独家算法,不过后来似乎开源了(或是被逆向了?),有个叫 jbig2dec 的项目(MuPDF所有)也可以实现这种压缩和解压缩。
除了 Adobe Acrobat 外,目前个人已知使用了 jbig2dec 从而支持 JBig2 算法的软件有:MuPDF(解压、压缩),FreePic2Pdf(压缩),PDFPatcher(解压),PdfToy(解压、压缩)
FreePic2Pdf 没有从 PDF 导出图片的功能
其中 PdfToy 是付费软件,因此 PDF 导出图片优先推荐免费的 PDFPatcher、mutool(MuPDF)。
(二)由图片合成 PDF
由图片合成 PDF 得到的自然是图片版PDF,要想合成 PDF 的文件小,除了图片本身要尽量小外,另一大重要的就是压缩算法,CCITT G4 和 JBig2 都是无损压缩,对于黑白图片,后者压缩率更高,使用广泛。
Adobe Acrobat 的“合并文件”功能默认使用的应该是 CCITT 压缩算法,而没有用 JBig2,不清楚怎么开启
因此,要从图片合成 PDF,同样也推荐上述三款软件 FreePic2Pdf、PDFPatcher、-PdfToy
PDFPatcher 合成 PDF 似乎没有去使用 JBig2 等高压缩的算法,导致生成的 PDF 体积较大
其中 mutool、PDFPatcher 均无法指定压缩算法,而 PdfToy 是付费软件,因此合成PDF优先推荐 FreePic2Pdf(压缩后的pdf还可无损还原成 pdg)。
(三)将 pdg 转换成 jpg/png
目前仅知 Pdg2Pic 支持这种转换。
非专业人士,水平较低,仅个人经验总结。有不错的工具或方法,欢迎大家留言补充,集思广益