news 2026/9/3 4:26:22

使用Python整体高效压缩PDF文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用Python整体高效压缩PDF文件

1.功能

编写Python代码,批量压缩pdf文档,压缩率可达到90%

2.处理思路

先把pdf转成图片,然后压缩图片,再把压缩好的图片合成pdf(以下描述来自AI)
具体思路:

  1. 栅格化(PDF转图片)
    代码读取 PDF 的每一页,强制把页面上的所有内容(文字、矢量图、遮罩)渲染成一张位图数据(Pixmap)
    • 代码对应:page.get_pixmap(...)
  2. 重编码(图片转JPEG)
    把这张位图数据,使用JPEG 算法进行有损压缩。这一步通过丢弃颜色细节来减小体积。
    • 代码对应:pix.tobytes("jpeg", ...)
  3. 重组装(图片转PDF)
    新建一个空白 PDF 页面,把压缩后的 JPEG 数据流直接填进去,最后保存。
    • 代码对应:new_page.insert_image(...)

总结:原理就是PDF页 -> 渲染为像素点 -> 压缩成JPEG -> 塞回新PDF

3.准备工作

python版本:

  • python3.8版本以上

安装第三方库:

pip install pymupdf

参考代码

importosimportfitz# PyMuPDFimporttime# === 💎 超清重制配置 (影院级) ===# 1. 清晰度 (缩放倍数)# 2.5 = 180 DPI (还有点糊)# 3.0 = 216 DPI (非常清晰,类似 iPad 阅读体验)# 如果还觉得糊,可以极端点设为 4.0 (300 DPI 打印级),但体积会翻倍ZOOM_FACTOR=3.0# 2. 图片质量 (1-100)# 85 是高保真分界线,文字边缘会很干净JPG_QUALITY=85defrasterize_pdf(input_path,output_path):try:doc_src=fitz.open(input_path)doc_out=fitz.open()total_pages=len(doc_src)print(f" 📄 总页数:{total_pages}(超清渲染中...)")forpage_num,pageinenumerate(doc_src):# 1. 超清渲染 (3倍分辨率)# alpha=False 强制白底,防止透明变黑mat=fitz.Matrix(ZOOM_FACTOR,ZOOM_FACTOR)pix=page.get_pixmap(matrix=mat,alpha=False)# 2. 高保真压缩img_data=pix.tobytes("jpeg",jpg_quality=JPG_QUALITY)# 3. 创建页面new_page=doc_out.new_page(width=page.rect.width,height=page.rect.height)# 4. 插入图片new_page.insert_image(page.rect,stream=img_data)# 释放内存 (大图很吃内存,必须及时释放)pix=None# 进度条print(f" [{(page_num+1)/total_pages*100:.0f}%] 第{page_num+1}/{total_pages}页",end="\r")print("")# 保存doc_out.save(output_path,garbage=4,deflate=True)doc_out.close()doc_src.close()returnTrueexceptExceptionase:print(f" ❌ 出错:{e}")returnFalsedefrun_rasterize_batch(input_folder,output_folder):ifnotos.path.exists(output_folder):os.makedirs(output_folder)files=[fforfinos.listdir(input_folder)iff.lower().endswith('.pdf')]print(f"📸 启动【超清重制】模式")print(f"⚙️ 参数: 倍数={ZOOM_FACTOR}x (~{int(72*ZOOM_FACTOR)}DPI) | 画质 Q={JPG_QUALITY}")print("-"*50)fori,finenumerate(files):input_file=os.path.join(input_folder,f)output_file=os.path.join(output_folder,f)start_time=time.time()file_size_org=os.path.getsize(input_file)print(f"({i+1}/{len(files)}) 正在重制:{f}")ifrasterize_pdf(input_file,output_file):ifos.path.exists(output_file):file_size_new=os.path.getsize(output_file)ratio=(1-(file_size_new/file_size_org))*100duration=time.time()-start_timeprint(f" ✅ 完成! 耗时{duration:.1f}s")print(f" 📉 体积:{file_size_org/1024/1024:.1f}MB ->{file_size_new/1024/1024:.1f}MB (节省{ratio:.1f}%)")else:print(f" ❌ 失败")print("-"*50)if__name__=="__main__":# 路径input_dir=r"E:\Aliencell_User_Manual\all_user_manual"output_dir=r"E:\Aliencell_User_Manual\output_cinema_quality"run_rasterize_batch(input_dir,output_dir)
  • 如果想要提高图片质量或者更改清晰度修改参数JPG_QUALITY或者ZOOM_FACTOR
  • 将所有pdf文件放在input_dir ,然后创建一个输出的文件夹。注意更改路径和名称,名称不要用中文
input_dir = r"E:\Aliencell_User_Manual\all_user_manual"output_dir = r"E:\Aliencell_User_Manual\output_cinema_quality"
  • 运行效果
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 0:16:00

【CDA干货】互联网人必会的5种数据分析方法!帮你解决80%职场难题

“数据很多,结论很少?”“不知道用哪种模型,怕被笑不专业?”今天给我们把互联网运营、产品、营销岗位上最常用、最落地、最经得起“老板追问”的5种数据分析方法分享给你。照着用,就能让数据真正开口说话。一、同环比分…

作者头像 李华
网站建设 2026/9/3 2:15:09

Jupyter Notebook %timeit魔法测试GLM-4.6V-Flash-WEB推理耗时

Jupyter Notebook %timeit 实测 GLM-4.6V-Flash-WEB 推理性能 在多模态大模型日益普及的今天,一个现实问题始终困扰着开发者:模型能力再强,如果响应太慢,用户等不起,业务也落不了地。 尤其是在智能客服、视觉搜索、内容…

作者头像 李华
网站建设 2026/9/2 22:09:08

JavaScript防抖节流策略控制GLM-4.6V-Flash-WEB高频调用频率

JavaScript防抖节流策略控制GLM-4.6V-Flash-WEB高频调用频率 在构建现代Web端多模态AI应用时,一个看似简单却极易被忽视的问题浮出水面:用户操作的“自然性”与模型服务的“承受力”之间存在天然矛盾。比如,当用户上传一张图片并快速输入问题…

作者头像 李华
网站建设 2026/9/3 0:52:56

ADB调试工具与GLM-4.6V-Flash-WEB移动端集成实战

ADB调试工具与GLM-4.6V-Flash-WEB移动端集成实战 在智能终端日益普及的今天,用户对移动设备“看懂世界”的能力提出了更高期待——无论是拍照识物、图像问答,还是辅助视觉决策,背后都离不开多模态大模型的支持。然而,如何让这些原…

作者头像 李华
网站建设 2026/9/2 20:53:50

FastStone Capture注册码已过期?转向GLM-4.6V-Flash-WEB智能分析

GLM-4.6V-Flash-WEB:从截图到智能理解的跃迁 在日常开发与运维中,我们经常需要截取屏幕内容来记录问题、汇报进展或分析界面异常。过去,像 FastStone Capture 这类工具几乎是标配——它能精准捕获区域、添加标注、保存图像,功能齐…

作者头像 李华