Python压缩PDF

使用fitz模块

fitz模块(PyMuPDF库的一部分),将PDF文件压缩为图片,然后再将图片合并为新的PDF文件。
在运行代码之前,你需要安装PyMuPDF库:

安装PyMuPDF库

pip install PyMuPDF

代码示例

import fitz
import os


def convert_to_pic(zoom):
    if os.path.exists('squeeze_pdf\.pdf'):  # 临时文件夹,需要为空
        os.removedirs('squeeze_pdf\.pdf')
    os.mkdir('squeeze_pdf\.pdf')
    for pg in range(totaling):
        page = doc[pg]
        zoom = int(zoom)  # 值越大,分辨率越高,文件越清晰
        rotate = int(0)
        print(page)
        trans = fitz.Matrix(zoom / 100.0, zoom / 100.0).prerotate(rotate)
        pm = page.get_pixmap(matrix=trans, alpha=False)

        img_path = 'squeeze_pdf\.pdf/%s.jpg' % str(pg + 1)
        pm.save(img_path)  # 保存为图像文件
    doc.close()


def pic_to_pdf(output_path):
    doc = fitz.open()
    for pg in range(totaling):
        img_path = 'squeeze_pdf\.pdf/%s.jpg' % str(pg + 1)
        imgdoc = fitz.open(img_path)  # 打开图片
        # print(dir(imgdoc))
        pdfbytes = imgdoc.convert_to_pdf()  # 使用图片创建单页的PDF
        os.remove(img_path)
        imgpdf = fitz.open("pdf", pdfbytes)
        # print(dir(doc))
        doc.insert_pdf(imgpdf)  # 将当前页插入文档
    if os.path.exists(output_path):  # 若文件存在先删除
        os.remove(output_path)
    doc.save(output_path)  # 保存PDF文件
    doc.close()


def compress_pdf(source_path, output_path, zoom):
    convert_to_pic(zoom)
    pic_to_pdf(output_path)


if __name__ == "__main__":
    source_path = "squeeze_pdf\source.pdf"  # 需要压缩的PDF文件
    output_path = "squeeze_pdf\compressed.pdf"  # 压缩后的PDF文件路径
    doc = fitz.open(source_path)
    totaling = doc.page_count

    zoom = 200  # 清晰度调节,缩放比率
    compress_pdf(source_path, output_path, zoom)
    os.removedirs('squeeze_pdf\.pdf')

代码分析

另外,代码中使用了一个.pdf目录来存储临时图片文件,并在压缩完成后将其删除。

你可以将source.pdf替换为要压缩的PDF文件的路径,并将compressed.pdf替换为输出压缩后的PDF文件的路径。同时,你可以调整zoom参数来控制输出图片的清晰度和分辨率。

请确保代码所在的目录具有读写权限,并且没有与代码中使用的.pdf同名的文件或目录,以免冲突。

运行代码后,将生成一个压缩后的PDF文件,并且.pdf目录中的临时文件将被清理删除。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
原书名: Core Python Programming (2nd Edition) 原出版社: Prentice Hall PTR 作者: (美)Wesley J. Chun 译者: 宋吉广 出版社:人民邮电出版社 ISBN:9787115178503 上架时间:2008-6-23 出版日期:2008 年7月 开本:16开 页码:654 版次:2-1 第1部分 python核心  第1章 欢迎来到python世界    1.1 什么是python    1.2 起源    1.3 特点     1.3.1 高级     1.3.2 面向对象     1.3.3 可升级     1.3.4 可扩展     1.3.5 可移植性     1.3.6 易学     1.3.7 易读     1.3.8 易维护     1.3.9 健壮性     1.3.10 高效的快速原型开发工具     1.3.11 内存管理器     1.3.12 解释性和(字节)编译性    1.4 下载和安装python    1.5 运行python     1.5.1 命令行上的交互式解释器  .   1.5.2 从命令行启动脚本     1.5.3 集成开发环境     1.5.4 其他的集成开发环境和执行环境    1.6 python文档    1.7 比较pythonpython与其他语言的比较)    1.8 其他实现    1.9 练习   第2章 快速入门    2.1 程序输出,print语句及“hello world!”    2.2 程序输入和raw_input()内建函数    2.3 注释    2.4 操作符    2.5 变量和赋值    2.6 数字    2.7 字符串    2.8 列表和元组    2.9 字典    2.10 代码块及缩进对齐    2.11 if语句    2.12 while循环    2.13 for循环和range()内建函数    2.14 列表解析    2.15 文件和内建函数open()、file()    2.16 错误和异常    2.17 函数     2.17.1 如何定义函数     2.17.2 如何调用函数     2.17.3 默认参数    2.18 类    2.19 模块     2.19.1 如何导入模块     2.19.2 如何访问一个模块函数或访问一个模块变量    2.20 实用的函数    2.21 练习   第3章 python基础    3.1 语句和语法     3.1.1 注释(#)     3.1.2 继续(\)     3.1.3 多个语句构成代码组(:)     3.1.4 代码组由不同的缩进分隔     3.1.5 同一行书写多个语句(;)     3.1.6 模块    3.2 变量赋值     3.2.1 赋值操作符     3.2.2 增量赋值     3.2.3 多重赋值     3.2.4 “多元”赋值    3.3 标识符     3.3.1 合法的python标识符     3.3.2 关键字     3.3.3 内建     3.3.4 专用下划线标识符    3.4 基本风格指南     3.4.1 模块结构和布局     3.4.2 在主程序中书写测试代码    3.5 内存管理     3.5.1 变量定义     3.5.2 动态类型     3.5.3 内存分配     3.5.4 引用计数     3.5.5 垃圾收集    3.6 第一个python程序    3.7 相关模块和开发工具    3.8 练习   第4章 python对象    4.1 python 对象    4.2 标准类型    4.3 其他内建类型     4.3.1 类型对象和type类型对象     4.3.2 none--python的null对象    4.4 内部类型     4.4.1 代码对象     4.4.2 帧对象     4.4.3 跟踪记录对象     4.4.4 切片对象     4.4.5 省略对象     4.4.6 xrange 对象    4.5 标准类型操作符     4.5.1 对象值的比较     4.5.2 对象身份比较     4.5.3 布尔类型    4.6 标准类型内建函数     4.6.1 type()     4.6.2 cmp()     4.6.3 str()和repr()(及``操作符)     4.6.4 type()和isinstance()     4.6.5 python类型操作符和内建函数总结    4.7 类型工厂函数    4.8 标准

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值