【Python入门教程】Python压缩PDF(fitz、aspose.pdf、PyPDF2)

这篇具有很好参考价值的文章主要介绍了【Python入门教程】Python压缩PDF(fitz、aspose.pdf、PyPDF2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        我们平时在使用PDF时有时会遇到PDF过大的情况,例如最近我在进行工程制图时,需要将影像使用PDF导出,这就导致PDF文件会非常大,一般有200M左右,这对于数据传输非常不友好。同时有很多软件的PDF压缩功能都需要收费,所以今天就跟大家分享一下如何使用Python对PDF文件进行压缩,这里给大家分别用三个Python库对PDF文件进行压缩。

1. fitz库进行PDF压缩

1.1 fitz库介绍

        Python的fitz库是一个基于Python开发的PDF处理库,它是PyMuPDF的前身。fitz提供了一系列的API和功能,可以用于读取、编辑和生成PDF文件。此外,它还可以处理其他类型的图像,如TIFF和JPEG,提供图像处理功能,如旋转、裁剪、缩放、调整亮度、对比度和色彩平衡等。

        在使用fitz库之前,需要先安装它。可以通过pip命令进行安装,但需要注意的是,fitz库依赖于libmupdf,所以在安装前需要先安装libmupdf。安装完成后,可以导入fitz库,并使用其中的函数和类来操作PDF文件或其他图像。

        在Python中,fitz库可以用于多种任务,如打开PDF文件、遍历页面、添加注释、提取文本、旋转页面等。此外,它还可以用于在PDF页面上添加高亮注释、提取图像等操作。

        总的来说,fitz库是一个非常实用的Python库,它提供了丰富的PDF和图像处理功能,可以让我们更加方便地处理PDF文件和其他图像。虽然可能需要一定的学习曲线,但是一旦掌握了其使用方法,就能够大大提高工作效率。

1.2 代码

# -*- coding: utf-8 -*-
"""
@Time : 2023/11/3 14:37
@Auth : RS迷途小书童
@File :Compress PDF.py
@IDE :PyCharm
@Purpose:PDF文件压缩
@Web:博客地址:https://blog.csdn.net/m0_56729804
"""
import os
import fitz
import PyPDF2
import aspose.pdf as ap


# --------------------------------------通过转换图片实现压缩------------------------------------


def convert_img(path1, dpi, work_path):
    file = fitz.open(path1)
    page_count = file.page_count
    if os.path.exists(work_path):  # 临时文件夹,需要为空
        os.removedirs(work_path)
    os.mkdir(work_path)
    for i in range(page_count):
        page = file[i]
        dpi = int(dpi)  # 值越大,分辨率越高,文件越清晰
        rotate = int(0)
        print(page)
        trans = fitz.Matrix(dpi / 100.0, dpi / 100.0).prerotate(rotate)
        pm = page.get_pixmap(matrix=trans, alpha=False)
        img_path = work_path + '/%s.jpg' % str(i + 1)
        pm.save(img_path)  # 保存为图像文件
    file.close()


def img_for_pdf(path1, path2, work_path):
    file1 = fitz.open(path1)
    page_count = file1.page_count
    file2 = fitz.open()
    for i in range(page_count):
        img_path = work_path + '/%s.jpg' % str(i + 1)
        img = fitz.open(img_path)  # 打开图片
        pdf = img.convert_to_pdf()  # 使用图片创建单页的PDF
        os.remove(img_path)
        pdf_temp = fitz.open("pdf", pdf)
        file2.insert_pdf(pdf_temp)  # 将当前页插入文档
    if os.path.exists(path2):  # 若文件存在先删除
        os.remove(path2)
    file2.save(path2)  # 保存PDF文件
    file2.close()


def Compress_by_img(path1, path2, dpi, work_path):
    """
    :param path1: 需要压缩的pdf文件路径
    :param path2: 保存的pdf文件路径
    :param dpi: 分辨率
    :param work_path: 临时工作路径
    :return: None
    无水印,效果较好!
    """
    convert_img(path1, dpi, work_path)
    img_for_pdf(path1, path2, work_path)
    os.removedirs(work_path)


if __name__ == "__main__":
    work_path1 = r'Z:/彭俊喜/.pdf'
    in_path = r"Z:/彭俊喜/123.pdf"  # 需要压缩的PDF文件
    out_path = r"Z:/彭俊喜/321.pdf"  # 压缩后的PDF文件路径
    zoom = 1500  # 清晰度调节,缩放比率
    Compress_by_img(in_path, out_path, zoom, work_path1)

2.aspose.pdf库进行PDF压缩

2.1 aspose.pdf库介绍

        Aspose.PDF for Python是一款高级PDF处理API,它允许在跨平台应用程序中轻松生成、修改、转换、呈现、保护和打印PDF文档,而无需使用Adobe Acrobat。这款API提供了广泛的功能,包括压缩选项、表创建和处理、图形和图像功能、超链接功能、图章和水印任务,以及扩展的安全控件和自定义字体处理。

具体来说,Aspose.PDF for Python可以帮助你执行以下操作:

  1. 创建PDF文件:你可以使用Python代码生成全新的PDF文件,包括添加文本、图像、表格等元素。
  2. 编辑PDF文件:Aspose.PDF for Python允许你修改现有的PDF文件,包括更改文本、添加或删除页面、插入图像等。
  3. 转换PDF文件:这款API支持将PDF文件转换为其他格式,如Word、HTML、TXT和DOCX等,也支持将其他格式的文件转换为PDF。
  4. 处理PDF内容:你可以使用Aspose.PDF for Python来提取、修改或添加PDF中的文本、图像等元素。
  5. 添加水印和安全性:Aspose.PDF for Python允许你在PDF文件中添加水印,以增强文档的版权保护。此外,你还可以设置文档的访问权限、加密等安全措施。
  6. 优化PDF文件:这款API提供了压缩选项,可以帮助你减小PDF文件的大小,以便于网络传输或存储。

        总的来说,Aspose.PDF for Python是一款功能强大、易于使用的PDF处理库,它可以帮助你高效地处理PDF文件,提高工作效率。同时,它也提供了丰富的API接口和文档支持,方便开发者进行集成和开发。

2.2 代码

# -*- coding: utf-8 -*-
"""
@Time : 2023/11/3 14:37
@Auth : RS迷途小书童
@File :Compress PDF.py
@IDE :PyCharm
@Purpose:PDF文件压缩
@Web:博客地址:https://blog.csdn.net/m0_56729804
"""
import os
import fitz
import PyPDF2
import aspose.pdf as ap

# ---------------------------------------无损压缩,但有水印-------------------------------------


def Lossless_Compression(path1, path2):
    """
    :param path1: 需要压缩的pdf文件路径
    :param path2: 保存的pdf文件路径
    :return: None
    无损压缩,无法去除水印!!!
    """
    compress_path = ap.Document(path1)  # 需要压缩的pdf文件路径
    # print(compress_path)
    optimize = ap.optimization.OptimizationOptions()
    optimize.image_compression_options.compress_images = True
    optimize.image_compression_options.image_quality = 90  # 压缩质量
    compress_path.optimize_resources(optimize)
    compress_path.save(path2)  # 需要压缩后保存的文件路径
    # Evaluation Only. Created with Aspose.PDF. Copyright 2002-2023 Aspose Pty Ltd.无法去除水印


if __name__ == "__main__":
    work_path1 = r'Z:/彭俊喜/.pdf'
    in_path = r"Z:/彭俊喜/123.pdf"  # 需要压缩的PDF文件
    out_path = r"Z:/彭俊喜/321.pdf"  # 压缩后的PDF文件路径
    Lossless_Compression(in_path, out_path)

3.PyPDF2库进行PDF

3.1 PyPDF2库介绍

        PyPDF2是一个纯Python的PDF处理库,它允许用户读取、合并、拆分、旋转和转换PDF文件。此外,它还可以为PDF文件添加水印、密码保护,以及从PDF中提取文本和元数据。

以下是PyPDF2库的一些主要功能和特点:

  1. PDF合并与拆分:PyPDF2可以轻松地将多个PDF文件合并成一个文件,或者将一个PDF文件拆分为多个文件。这对于处理大量PDF文件或重新组织文件内容非常有用。
  2. 页面旋转:PyPDF2允许用户旋转PDF文件中的页面,这对于调整页面方向或修复错误的页面方向非常有帮助。
  3. 添加水印:使用PyPDF2,用户可以为PDF文件添加自定义的水印,以增强文档的版权保护或品牌识别。
  4. 密码保护:PyPDF2提供了为PDF文件添加密码保护的功能,以确保文档的安全性。只有知道密码的用户才能打开和编辑文件。
  5. 文本和元数据提取:PyPDF2可以从PDF文件中提取文本和元数据(如作者、标题、主题等),这对于分析和处理PDF内容非常有用。
  6. 兼容性强:PyPDF2库兼容所有版本的PDF文件,并且可以在任何平台上运行,而无需对任何外部库产生任何与平台相关的依赖。

        总的来说,PyPDF2是一个功能强大且易于使用的Python PDF处理库,适用于各种PDF处理任务,包括文件合并、拆分、旋转、添加水印、密码保护以及文本和元数据提取等。然而,需要注意的是,PyPDF2项目的最后一个版本将是3.0.X,后续的开发将继续使用pypdf==3.1.0。因此,在使用PyPDF2时,建议查看最新的文档和更新信息,以确保兼容性和稳定性。

3.2 代码

# -*- coding: utf-8 -*-
"""
@Time : 2023/11/3 14:37
@Auth : RS迷途小书童
@File :Compress PDF.py
@IDE :PyCharm
@Purpose:PDF文件压缩
@Web:博客地址:https://blog.csdn.net/m0_56729804
"""
import os
import fitz
import PyPDF2
import aspose.pdf as ap

# ---------------------------------------逐页压缩,效果未知-------------------------------------
def compress_by_page(path1, path2):
    """
    :param path1: 需要压缩的pdf文件路径
    :param path2: 保存的pdf文件路径
    :return: None
    逐页压缩,效果未知,慢!!!
    """
    pdf_file = open(path1, "rb")
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    pdf_writer = PyPDF2.PdfWriter()
    for page_num in range(len(pdf_reader.pages)):
        page = pdf_reader.pages[page_num]
        page.compress_content_streams()
        pdf_writer.add_page(page)
    out_file = open(path2, "wb")
    pdf_writer.write(out_file)
    out_file.close()
    pdf_file.close()


if __name__ == "__main__":
    # work_path1 = r'Z:/彭俊喜/.pdf'
    in_path = r"Z:/彭俊喜/123.pdf"  # 需要压缩的PDF文件
    out_path = r"Z:/彭俊喜/321.pdf"  # 压缩后的PDF文件路径
    compress_by_page(in_path, out_path)

4.总结

        从三个库的压缩效果来说,aspose.pdf库压缩的时间最短、质量更好、占用空间最小,但它保存PDF时会在左上角默认添加一行红字(版权说明)。其次就是fitz库,通过调节分辨率也可以很高质量地压缩PDF,但是占用空间略大于aspose.pdf。最后就是PyPDF2,虽然是原生的Python库,但是压缩速度较慢,同时它的原理是逐页进行图片压缩,对于我这个单页单图片太大的PDF作用不大,我也没空去测试多页压缩的效果,你们可以自己试试。

        我会不定期地分享平时工作、学习中使用的代码和学习经验,感兴趣的话可以点个关注。如果有什么学术问题,可以直接留言或者私信我,看到就会回复!文章来源地址https://www.toymoban.com/news/detail-836046.html

到了这里,关于【Python入门教程】Python压缩PDF(fitz、aspose.pdf、PyPDF2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 条码控件Aspose.BarCode入门教程(8):C#从图像中读取条形码

    Aspose.BarCode for .NET 是一个功能强大的API,可以从任意角度生成和识别多种图像类型的一维和二维条形码。开发人员可以轻松添加条形码生成和识别功能,以及在.NET应用程序中将生成的条形码导出为高质量的图像格式。 Aspose API支持流行文件格式处理,并允许将各类文档导出或

    2023年04月25日
    浏览(47)
  • python压缩pdf文件大小

    pdf文件过大,经常会是一个问题,但是市面上基本上都是收费的工具,wps需要开会员才能使用。因此找了一个python库进行试验: 首先需要安装 运行的代码: 这个代码使用非常简单,主要是压缩文件里面的图片质量,实际上图片质量差一些在阅读器里面是看不出来的区别,效

    2024年02月13日
    浏览(40)
  • PDF处理控件aspose.PDF功能演示:使用 C# .NET 复制 PDF 页面

    作为程序员,您通常必须以纯文本形式从 PDF 文件中提取内容以进行进一步处理,例如分析和信息提取。如果没有合适的工具,处理 PDF 文件并将整个 PDF 转换为 TXT 格式是一项麻烦的任务。因此,在本博客中,我们将探讨如何使用 C# 以编程方式将 PDF 文件转换为 TXT 格式。 A

    2024年01月23日
    浏览(50)
  • 【aspose之三】【springboot】java使用aspose.html 的cloud版html转pdf,html2pdf

    把url网页或本地文件html转换pdf 1.maven配置 2.代码 本地文件 html转pdf 可本地文件或url转换 pdf布局设置 2.密钥及配置 aspose配置

    2024年02月06日
    浏览(40)
  • aspose 使用ftl模板生成word和pdf

    1 先找到word模板,用${},替换变量,保存,然后另存为xml,最后把xml后缀改成ftl。 如下图: word 模板文件 ftl模板文件如下: 2 代码生成 下面函数将ftl填充数据,并生成word和pdf 3 测试主程序 4 结果: pdf文件 word文件 还可以生成图片:

    2024年02月13日
    浏览(37)
  • PDF处理控件Aspose.PDF功能演示:使用Java将Base64字符串转换为PDF/JPG/PNG图像

    Aspose.PDF  是一款高级PDF处理API,可以在跨平台应用程序中轻松生成,修改,转换,呈现,保护和打印文档。无需使用Adobe Acrobat。此外,API提供压缩选项,表创建和处理,图形和图像功能,广泛的超链接功能,图章和水印任务,扩展的安全控件和自定义字体处理。 Aspose API支持

    2024年02月04日
    浏览(79)
  • 使用aspose相关包将excel转成pdf 并导出

    1、依赖的jar包 , jar获取链接 aspose相关三方jar ,下载解压后,在项目路径下建一个libs包,然后将下图两个jar 拷贝至刚新建的libs目录中 2、pom.xml中加入maven引入 2.1 使用SpringBoot打包插件生成jar包的时候,你会发现这个jar包不会被打进去,进而出现错误。解决这个问题就需要在

    2024年04月09日
    浏览(73)
  • Java将Word转换成PDF-aspose

    本文将演示用aspose-word.jar包来实现将Word转换成PDF,且可以保留图表和图片。 在公司OA项目开发中, 需要将word版本的合同模板上传,业务员只能下载pdf版本合同模板,需要实现将Word转换成PDF,并且动态填充项目编号以及甲乙方信息等。 Aspose.Words for Java是一个原生库,为开发

    2024年02月07日
    浏览(50)
  • (Java)word转pdf(aspose),pdf加水印(itextpdf),并支持POI模板(包括checkbox)导出

    目录 1、引入jar包 2、pdf处理工具类 3、poi模板导出工具类 4、测试类 5、模板 6、最终效果  1、引入jar包   2、pdf处理工具类  3、poi模板导出工具类  4、测试类 5、模板 6、最终效果 

    2024年02月06日
    浏览(72)
  • 使用Aspose.Words将word转PDF并且去水印。

    😜 作           者 :是江迪呀 ✒️ 本文 : Java 、 工具类 、 转换 、 word转pdf 、 Aspose.Words 、 后端 ☀️ 每日   一言 : 只要思想不滑坡,办法总比困难多。 在我们日常开发中经常会有将 word文档 转为 PDF 的场景,有很多种方法我最倾向的的是使用 Aspose.Words ,原

    2024年02月11日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包