许多库和工具在处理文件、图像和文档时执行各种任务。PDF 文件就是一个很好的例子,它可以使用 Python 库和 AI 模型进行多个处理阶段。
出于各种原因,减小 PDF 文件的大小是必要的,并且有各种工具可以实现这一点。一个有趣的方法是使用 PyMuPDF 库。该库设计用于各种任务,包括提取文本、从文档创建图像、向文档添加图像以及在文档页面上执行光学字符识别 (OCR)。
但是,它也可以采用一种特殊技术来减小 PDF 的文件大小。本文将探讨 Hanif 如何利用 PyMuPDF 库来完成此任务。
PyMuPDF 是什么?
PyMuPDF 是一个 Python 库,擅长从 PDF 文件和其他文档格式中提取、分析、处理和转换数据。使用此库,您可以从 PDF 文件中提取文本和图像。但它的功能远不止于此。PyMuPDF 还可以提取矢量图形并合并 PDF 文件。
该库的另一个有趣的功能是它能够操作和处理 PDF 文件。该库可以执行一系列任务,包括添加水印和图像,以及嵌入和附加文件。
PDF 为何会变得臃肿?
PDF 文件过大的原因有很多。高图像分辨率、嵌入字体、未使用的对象以及其他因素都会影响这些文件的大小。压缩文件是一种非常有效的优化技术,因为它可以提供更好的整体体验。压缩较大的 PDF 文件非常重要,原因有很多,包括节省存储空间、提高 Web 性能以及方便共享。
使用 PyMuPDF 精简 PDF 文件是一种无缝方法。该库可以在低资源环境中运行,并产生出色的结果。我们将探讨这项技术如何创建该工具,以及如何实现所需的结果。
如何使用此库缩小 PDF
我们首先设置环境并使用 PyMuPDF 压缩 PDF 文件的大小。然后,安装处理文件所需的必要模块。现在,让我们开始吧。
设置环境
要运行此操作,您必须安装 PyMuPDF Python 库,它允许您处理 PDF 文件和其他文档格式。
!pip install pymupdf
导入必要的库
import os
import fitz # PyMuPDF
此操作需要两个库:OS 和 Fitz。OS 库提供通过管理文件路径实现与操作系统交互的函数。PyMuPDF 库的主要模块是 Fitz,负责处理 PDF 和其他文档格式。Fitz 可以轻松打开、加载、读取和操作 PDF 文件,这对于涉及文件大小缩减的任务尤为重要。
压缩 PDF 文件
def compress_pdf(input_path, output_path, zoom_x=0.75, zoom_y=0.75):
try:
document = fitz.open("input_path")
new_document = fitz.open()
此函数旨在通过减小页面大小来压缩 PDF 文件。该函数使用 PyMuPDF 库(也称为 fitz.open 函数)加载原始 PDF 文件。然后,它会创建一个新的空文档,以便您添加压缩文件。PDF 操作
。
除了设置打开原始文件和创建新文档的功能之外,还必须设置以合适的格式压缩文件的结构。
for page_num in range(len(document)):
page = document.load_page(page_num)
mat = fitz.Matrix(zoom_x, zoom_y)
pix = page.get_pixmap(matrix=mat, alpha=False)
img_bytes = pix.tobytes("jpeg")
new_page = new_document.new_page(width=pix.width, height=pix.height)
new_page.insert_image(new_page.rect, stream=img_bytes)
此代码块循环遍历原始 PDF 的每一页。对于每一页,它都会创建一个缩放矩阵 (fitz.Matrix) 来缩减页面内容,将页面渲染为像素图(图像),将其转换为 JPEG 字节,然后将图像插入到新的压缩 PDF 中的一个空白页中。此过程通过将视觉内容保存为图像,有效地减小了文件大小。
保存新压缩的 PDF
new_document.save(output_path)
new_document.close()
document.close()
这段代码会帮您将新压缩的 PDF 文件保存到 output_path。但是,它会关闭原始文档和压缩文档以释放内存。这确保所有更改都已写入,并且不会在内存中留下任何打开的文件。
结果
print(f"✅ Compressed: {output_path}")
print(f" Original: {os.path.getsize(input_path)/1024:.2f} KB")
print(f" Compressed: {os.path.getsize(output_path)/1024:.2f} KB")
使用此代码,您可以显示压缩文件的路径,并查看原始文档和新文档的大小。此操作使用 os.path 模块执行。getsize() 用于获取新文档的大小。输出也被格式化为两位小数,以提高可读性。
批量 PDF 压缩和错误处理
except Exception as e:
print(f"❌ Error compressing {input_path}: {str(e)}")
if __name__ == "__main__":
folder = "/content"
if not os.path.isdir(folder):
raise FileNotFoundError(f"Folder '{folder}' does not exist.")
pdf_files = [f for f in os.listdir(folder) if f.endswith(".pdf")]
if not pdf_files:
print("⚠️ No PDF files found in the folder.")
else:
for filename in pdf_files:
input_pdf = os.path.join(folder, filename)
output_pdf = os.path.join(folder, filename.replace(".pdf", "-compressed.pdf"))
compress_pdf(input_pdf, output_pdf)
此代码使用 try-except 块处理压缩过程中的错误。如果出现问题,它会捕获异常并打印一条错误消息,显示失败的文件及其原因。然后,在主执行块中,它会设置 PDF 文件所在的文件夹路径(在本例中为 /content)。
它会检查文件夹是否存在,如果不存在则抛出错误。接下来,它会查找该文件夹中的所有 PDF 文件。如果文件夹中未找到任何 PDF 文件,则会打印警告。否则,它会循环遍历每个 PDF 文件,为压缩版本创建一个新的输出文件名,并调用 compress_pdf() 函数执行压缩。
结果
在本地运行此代码将生成压缩文档的输出,并标记为“已压缩”。所有这些操作都在文件夹中;您可以获得已调整大小的 PDF。
使用 PyMuPDF 来减小文件大小
此工具在各种需要缩减文件大小的场景中尤其有用。例如,电子邮件附件优化、Web 和应用程序性能提升以及归档和存储管理。
在许多公司工作场所,电子邮件附件受到限制(例如 20MB),但使用 PyMuPDF,您可以压缩文件、报告、提案和其他文档以保持在给定的限制范围内。
减小文件大小还可以提高加载速度并提升用户体验。这对于托管在线 PDF 文件的机构、银行、学术机构和法律组织尤其必要。
优化存储空间是该工具重要的另一个原因。医院、公司、政府机构甚至一些企业都存储着大量的 PDF 文档。减小文件大小对于节省存储空间和内存至关重要。
使用 Streamlit 探索 PyMuPDF
您可以使用 Streamlit 的简洁用户界面来应用此压缩器,从而支持压缩算法。此工具可以帮助您设置一个能够处理这些文件的页面。因此,您可以测试压缩器,同时允许对编码技术有深入理解的人员使用。
本节将解释设置页面以运行此压缩工具的简单指南。
页面设置
使用 Streamlit 的第一步是利用其页面设置功能。这允许您创建一个居中的标题和简约的界面,您可以在其中添加属性、链接、按钮、文件上传和其他输入。在这种情况下,使用 PyMuPDF 需要添加一个用于上传文件的界面,这将带我们进入下一步。
文件处理
您可以使用 Streamlit 上的带边框容器创建仅接受 PDF 文件的文件上传器。此属性可帮助您有效地处理上传的文件,因为它可以避免将文件保存在磁盘上。
用户控制(新增功能)
该工具具有一个范围从 0 到 100 的高质量滑块,允许用户精确控制所需的压缩级别。
显示一条信息性消息,说明较低的质量设置会导致文件大小较小。具有一个与容器宽度等宽的大型“压缩 PDF”按钮,使其清晰可见且易于点击。
处理流程
上传 PDF 后,该应用会获取文件名和大小,然后启用压缩选项。点击“压缩 PDF”后,会出现一个加载旋转图标,文件会使用临时存储进行处理,并执行压缩算法。
压缩后,它会显示文件大小比较,提供下载按钮,并在压缩失败时显示错误消息。
本地运行 Streamlit
正如我们之前提到的,这个平台允许你设置一个简单的用户界面来托管你的小项目。它还允许一些简单的属性,例如按钮、文件上传器和链接。以下是一个简单的操作指南:
克隆 GitHub 仓库
导航到并克隆 GitHub 存储库https://github.com/Hanif-adedotun/compress-pdf.git
导航到文件夹的根目录
在路径上打开终端
运行 pip install -r requirements.txt
运行streamlit streamlit.py
打开浏览器访问 localhost:8501
瞧!您现在可以访问系统上运行的本地主机版本的项目了。
安装 Streamlit
Pip install Streamlit
安装成功后,就可以运行 Python 代码了。如果没有遇到任何错误,则表示 Streamlit 安装成功。
运行Streamlit文件
Streamlit run filename.py
此命令将引导您到 Web 浏览器上的本地 URL,然后您可以继续开始构建页面。
使用此工具,您可以使用 Streamlit 的基本功能和属性来运行您的小型项目,例如 PDF 压缩器。即使您不懂 HTML 和 CSS,也可以添加许多功能。查看本指南,了解更多关于使用 Streamlit 的信息。
总结
本文探讨了 PyMuPDF Python 库如何有效压缩 PDF 文件的大小。用户可以通过将页面转换为压缩图像并重建文档来优化 PDF,使其适合电子邮件、网页和存储。
Hanif 演示了一种实用有效的方法,它使用简单的代码、批处理和错误处理。这项技术对于处理大量数字文档的组织尤其有用。

