Python 如何批量压缩PDF文件或减小PDF文件大小

目录

[安装Python PDF库](#安装Python PDF库)

Python通过压缩图片来减小PDF文件大小

Python通过压缩字体或取消嵌入字体来减小PDF文件大小

Python通过删除不必要的内容如附件、注释或表单来减小PDF文件大小

总结


PDF文件凭借其平台无关性和便携性,已经成为日常办公和信息共享的首选格式。然而,很多PDF文件通常都体积较大,给存储和传输带来不少麻烦。尤其当需要频繁发送、共享或备份大型PDF时,文件体积问题就会凸显出来,不仅传输速度慢,还耗费大量存储空间。压缩PDF文档可以有效减小PDF文件的大小,加快文件的传输和共享。在这篇博客中,我们将探讨使用Python 压缩PDF 文件的几种方式:

  • Python通过压缩图片来减小PDF文件大小
  • Python通过压缩字体或取消嵌入字体来减小PDF文件大小
  • Python通过删除不必要的内容如附件、注释或表单来减小PDF文件大小

安装Python PDF库

要在Python中压缩PDF文件,可以使用Spire.PDF for Python库。它支持在Python应用程序中创建、读取、操作和转换PDF文档。

你可以通过在终端运行以下命令来从PyPI安装Spire.PDF for Python:

python 复制代码
pip install Spire.PDF

Python通过压缩图片来减小PDF文件大小

很多大型PDF文件中通常包含大量的高分辨率的图片,这些图片是造成文件较大的主要原因。通过调整图片的分辨率和质量可以达到减小PDF文件大小的目的。

压缩PDF文件中的图片的主要步骤如下:

  • 创建PdfCompressor实例,用于压缩指定的PDF文件。
  • 设置压缩选项,如设置图片质量、启用图片大小调整和压缩。
  • 使用**PdfCompressor.CompressToFile()**方法压缩PDF文档并将结果保存为一个新的PDF。

下面是批量压缩一个文件夹下的所有PDF文件中的图片的实现代码:

python 复制代码
import os
from spire.pdf import *
from spire.pdf.common import *

# 设置输入和输出文件夹
input_folder = "输入PDF/"
output_folder = "输出PDF/"

# 创建输出文件夹(如果不存在)
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 遍历输入文件夹下的所有 PDF 文件
for filename in os.listdir(input_folder):
    if filename.endswith(".pdf"):
        input_pdf = os.path.join(input_folder, filename)
        output_pdf = os.path.join(output_folder, filename)

        # 创建 PdfCompressor 对象,并设置压缩选项(设置图片质量、启用图片大小调整和压缩)
        compressor = PdfCompressor(input_pdf)
        compression_options = compressor.OptimizationOptions
        compression_options.SetImageQuality(ImageQuality.Medium)
        compression_options.SetResizeImages(True)
        compression_options.SetIsCompressImage(True)

        # 压缩 PDF 文件并保存到输出文件夹
        compressor.CompressToFile(output_pdf)

Python通过压缩字体或取消嵌入字体来减小PDF文件大小

PDF 中嵌入的字体也会导致文件大小增大。通过压缩或取消嵌入这些字体有助于减小文件大小。

压缩PDF文件中的字体或取消嵌入字体的主要步骤如下:

  • 创建PdfCompressor实例,用于压缩指定的PDF文件。
  • 设置压缩选项,如启用字体压缩或取消嵌入字体。
  • 使用**PdfCompressor.CompressToFile()**方法压缩PDF文档并将结果保存为一个新的PDF。

下面是批量压缩一个文件夹下的所有PDF文件中的字体或者取消这些PDF文件中的字体嵌入的实现代码:

python 复制代码
from spire.pdf import *
from spire.pdf.common import *
import os

# 设置输入和输出文件夹
input_folder = "输入PDF/"
output_folder = "输出PDF/"

# 创建输出文件夹(如果不存在)
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 遍历输入文件夹下的所有 PDF 文件
for filename in os.listdir(input_folder):
    if filename.endswith(".pdf"):
        input_pdf = os.path.join(input_folder, filename)
        output_pdf = os.path.join(output_folder, filename)

        # 创建 PdfCompressor 对象并设置压缩选项
        compressor = PdfCompressor(input_pdf)
        compression_options = compressor.OptimizationOptions
        # 启用字体压缩
        compression_options.SetIsCompressFonts(True)
        # 或取消嵌入字体
        # compression_options.SetIsUnembedFonts(True)

        # 压缩 PDF 文件并保存到输出文件夹
        compressor.CompressToFile(output_pdf)

Python通过删除不必要的内容如附件、注释或表单来减小PDF文件大小

优化图片或字体是压缩PDF文档的两种主要方式。但有时候,PDF文件可能包含各种附件、注释、或表单数据等附加信息,这些信息也会增加文件的大小。删除掉文件中不需要的内容,也能减小文件的大小。

下面是从一个PDF文件中删除附件的主要步骤:

  • 创建 PdfDocument实例并传入要压缩的 PDF 文件路径。
  • PdfDocument.FileInfo.IncrementalUpdate属性设置为False来禁用增量更新。
  • 使用**PdfDocument.Attachments.Clear()**方法删除文件中所有的附件。
  • 使用**PdfDocument.SaveToFile()**方法将结果保存为一个新的PDF。

实现代码:

python 复制代码
from spire.pdf import *
from spire.pdf.common import *

# 创建PdfDocument 对象并传入要压缩的 PDF 文件路径
input_pdf = "测试.pdf"
pdf = PdfDocument(input_pdf)
# 禁用增量更新
pdf.FileInfo.IncrementalUpdate = False

# 从 PDF 文件中删除所有附件
pdf.Attachments.Clear()

# 将结果保存到一个新文件
output_pdf = "删除附件.pdf"
pdf.SaveToFile(output_pdf)
pdf.Close()

下面是从一个PDF文件中删除注释的主要步骤:

  • 创建一个 PdfDocument实例并传入要压缩的 PDF 文件路径。
  • PdfDocument.FileInfo.IncrementalUpdate属性设置为False来禁用增量更新。
  • 遍历PDF文件中的页面。
  • 使用**PdfPageBase.Annotations.Clear()**方法删除页面上的所有注释。
  • 使用**PdfDocument.SaveToFile()**方法将结果保存为一个新的PDF。

实现代码:

python 复制代码
from spire.pdf import *
from spire.pdf.common import *

# 创建 PdfDocument 对象并指定要压缩的 PDF 文件路径
input_pdf = "测试.pdf"
pdf = PdfDocument(input_pdf)
# 禁用增量更新
pdf.FileInfo.IncrementalUpdate = False

# 遍历 PDF 文件的每一页并从中删除注释
for i in range(pdf.Pages.Count):
    page = pdf.Pages[i]
    page.Annotations.Clear()
    
# 将结果保存到一个新文件
output_pdf = "删除注释.pdf"
pdf.SaveToFile(output_pdf)
pdf.Close()

下面是扁平化或删除一个PDF文件中的所有表单的主要步骤:

  • 创建PdfDocument实例并传入要压缩的 PDF 文件路径。
  • PdfDocument.FileInfo.IncrementalUpdate属性设置为False来禁用增量更新。
  • 使用PdfDocument.Form属性获取文件中的表单。
  • 使用PdfForm.IsFlatten 属性扁平化所有表单。或使用**PdfFormWidget.FieldsWidget.Clear()**方法删除所有表单。
  • 使用**PdfDocument.SaveToFile()**方法将结果保存为一个新的PDF。

实现代码:

python 复制代码
from spire.pdf import *
from spire.pdf.common import *

# 创建一个 PdfDocument 对象并指定要处理的 PDF 文件路径
input_pdf = "测试.pdf"
pdf = PdfDocument(input_pdf)
# 禁用增量更新
pdf.FileInfo.IncrementalUpdate = False

# 获取 PDF 文件中的表单
form = pdf.Form
# 扁平化表单
# form.IsFlatten = True

# 从 PDF 文件中删除所有表单
formWidget = PdfFormWidget(form)
formWidget.FieldsWidget.Clear()
    
# 将结果保存到一个新文件
output_pdf = "扁平化或删除表单.pdf"
pdf.SaveToFile(output_pdf)
pdf.Close()

总结

这篇博客介绍了使用Python压缩PDF文档的几种不同的方式。你可以根据自己的文档结构,使用其中最适合的一种或者结合多种方式来实现最优压缩效果。

感谢阅读!

相关推荐
sali-tec9 小时前
C# 基于halcon的视觉工作流-章42-手动识别文本
开发语言·人工智能·算法·计算机视觉·c#·ocr
csbysj20209 小时前
中介者模式
开发语言
B站_计算机毕业设计之家9 小时前
机器学习实战项目:Python+Flask 汽车销量分析可视化系统(requests爬车主之家+可视化 源码+文档)✅
人工智能·python·机器学习·数据分析·flask·汽车·可视化
羊羊小栈10 小时前
基于「多模态大模型 + BGE向量检索增强RAG」的航空维修智能问答系统(vue+flask+AI算法)
vue.js·人工智能·python·语言模型·flask·毕业设计
星期天要睡觉10 小时前
模型部署——Flask 部署 PyTorch 模型
pytorch·python·flask
weixin_4569042710 小时前
SHAP可视化代码详细讲解
python
DTS小夏10 小时前
算法社Python基础入门面试题库(新手版·含答案)
python·算法·面试
刘一哥GIS10 小时前
Windows环境搭建:PostGreSQL+PostGIS安装教程
数据库·python·arcgis·postgresql·postgis
西柚小萌新10 小时前
【深入浅出PyTorch】--4.PyTorch基础实战
人工智能·pytorch·python
用户83562907805110 小时前
掌控PDF页面:使用Python轻松实现添加与删除
后端·python