如何通过Python高效压缩PDF?需在保质量前提下进一步缩减大小
优化PDF压缩方案(不损失内容/图片质量)
一、从生成源头优化(最直接有效)
既然是用pdfkit调用wkhtmltopdf生成的PDF,先从生成环节减少冗余,比事后压缩更高效:
调优wkhtmltopdf的图片相关参数
除了dpi,加上这些参数能让图片编码更高效:--image-quality 100:强制用最优质量压缩图片,避免默认的过度编码--enable-jpeg-compression:如果你的图片是无透明的JPG,启用这个参数能大幅降低体积(透明图别用)--image-dpi 96:网页默认dpi就是96,之前如果设成更高值(比如300)会导致图片被无意义放大,徒增体积,96足够保证屏幕和常规打印清晰度
把这些加到pdfkit的配置里,示例代码:
config = pdfkit.configuration(wkhtmltopdf='/usr/bin/wkhtmltopdf') options = { 'image-quality': '100', 'enable-jpeg-compression': '', 'image-dpi': '96', 'no-outline': '', 'quiet': '' } pdfkit.from_string(your_html_content, output_pdf_path, configuration=config, options=options)批量预处理源图片
你单张图片才623字节,但wkhtmltopdf可能会重新编码导致体积膨胀,先把源图片压缩到最优:- 格式适配:无透明的小图转JPG(用
convert命令:convert input.png -quality 90 output.jpg);有透明的用PNG-8替代PNG-24,体积能减一半以上 - 无损压缩:用
optipng -o7 input.png压缩PNG,jpegoptim --max=90 --strip-all input.jpg压缩JPG,都是几乎无损的操作,1050张图累计下来能省不少空间
- 格式适配:无透明的小图转JPG(用
二、事后压缩的进阶操作
试过常规工具后,试试这些针对性更强的命令:
Ghostscript针对图片密集PDF的优化参数
用这个命令专门处理多图片PDF,保证质量的前提下最大化压缩:gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dDownsampleColorImages=true -dColorImageResolution=96 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=compressed.pdf input.pdf/screen模式是为屏幕显示优化的高质量压缩,要兼容打印可以换成/ebook,但前者压缩比更高;-dDownsampleColorImages=true会把图片统一降到96dpi,和网页源一致,不会损失清晰度用mutool清理压缩
mutool是MuPDF自带的工具,对图片PDF的压缩效果很出色,命令:mutool clean -d -i input.pdf compressed.pdf-d去除冗余对象,-i自动优化图片编码,全程不损失内容质量合并重复图片
如果PDF里有重复的图片(比如每页都有相同的图标),用cpdf合并重复资源:cpdf -duplicate-images input.pdf -o compressed.pdf这个操作会把重复的图片只保留一份,其他页面引用该资源,能大幅减小体积
三、清理冗余数据
去除PDF元数据
用exiftool删掉PDF里的注释、元数据等无用信息:exiftool -all= input.pdf完全不影响内容,只是去掉额外的冗余数据
检查并清理冗余资源
用pdftk分析PDF结构,查看是否有重复的字体、资源引用:pdftk input.pdf dump_data output pdf_info.txt打开pdf_info.txt查看资源列表,要是有重复项,可以用mutool或cpdf进一步清理
内容的提问来源于stack exchange,提问作者Himanshu K
相关产品推荐
相关产品推荐

