关注我,学习更多实用Python知识
🌈 Hi,小伙伴们~
🛠️ 压缩 PDF 减小文件大小,能提高文件传输的效率,节省存储空间,除了使用一些专业工具对PDF文件进行压缩,我们还可以通过 Python 来执行该操作,实现自动化、批量处理PDF文件
🎯 今天,介绍2种在Python生态中广受好评的PDF压缩方案:PyMuPDF (fitz) 与 PyPDF2,它们分别适用于不同的场景,能够帮助你轻松减小PDF文件体积~✨

📚PyMuPDF 功能全面,压缩效果显著,特别适合包含大量图片的PDF
import fitz # PyMuPDF库def compress_pdf_with_fitz(input_path, output_path):""" 使用 PyMuPDF 压缩PDF文件 :param input_path: 输入PDF文件路径 :param output_path: 输出PDF文件路径 """ doc = fitz.open(input_path)# 对每一页进行内容流压缩for page in doc: page.clean_contents()# 关键压缩参数解析:# garbage=4: 最高级别清理冗余对象# deflate=True: 启用压缩# clean=True: 尝试进一步优化结构 doc.save(output_path, garbage=4, deflate=True, clean=True) doc.close()print(f"压缩完成,文件已保存至: {output_path}")📚如果你的PDF中重复对象多,PyPDF2 通过简单的“读取-重写”就能有效减小体积,且完全无损
from PyPDF2 import PdfReader, PdfWriterdef compress_pdf_with_pypdf2(input_path, output_path): reader = PdfReader(input_path) writer = PdfWriter()# 复制所有页面和元数据for page in reader.pages: writer.add_page(page) writer.add_metadata(reader.metadata)# 可选:启用内容流压缩 (CPU密集,但效果更好)# for page in writer.pages:# page.compress_content_streams() # 注意:这步比较耗时 with open(output_path, "wb") as output_file: writer.write(output_file)print(f"压缩完成,文件已保存至: {output_path}")# 使用示例compress_pdf_with_pypdf2("待压缩.pdf", "压缩后_pypdf2.pdf")追求最高压缩率:优先尝试 PyMuPDF,其 garbage 和 deflate 参数组合效果显著
处理图片PDF:PyMuPDF 是更好的选择,它针对图像有优化
要求快速且无损:选 PyPDF2,其“读取-重写”方法安全快捷
✅ 文件若依然很大:如果PDF内嵌了大量高分辨率图片,仅靠代码压缩可能收效甚微,一个有效的策略是:先用图像处理软件(如Photoshop、GIMP)或命令行工具(如ImageMagick)批量降低图片的DPI(例如从300dpi降至150dpi)然后再使用上述Python脚本进行二次压缩,效果将大幅提升
💡 关注我,每周分享 Python 干货 × 自动化技巧
📌 如果这篇文章对你有帮助,欢迎:
👍 点赞 | ⭐ 收藏 | 🔄 分享给朋友


👇点击阅读往期文章