【Python】PDF文件处理(PyPDF2、borb、fitz)

Python提供了多种方法和库用于处理PDF文件,这些工具可以帮助开发者实现诸如读取、写入、合并、拆分以及压缩等功能。以下是几个常用的Python PDF操作库及其基本用法(PyPDF2、borb、fitz)。

1. PyPDF2

PyPDF2 是一个功能强大的库,支持各种常见的PDF操作,例如读取、合并、分割、旋转页面等。尽管该库已经停止更新,但它仍然被广泛使用。

bash 复制代码
pip install pypdf2

下面是一个简单的例子展示如何使用 PyPDF2 合并两个PDF文件:

python 复制代码
import os
from PyPDF2 import PdfMerger

merger = PdfMerger()
files = ["file1.pdf", "file2.pdf"]

for file in files:
    if os.path.exists(file):
        merger.append(file)
    
merger.write("merged_file.pdf")
merger.close()

2. borb

borb 是另一个现代且易于使用的PDF库,它允许用户创建、修改现有的PDF文档,并提供了一些高级特性如加密和签名。以下是如何打开现有PDF文件并保存更改的一个示例:

bash 复制代码
pip install borb
python 复制代码
from borb.pdf.reader import SimplePDFReader
from borb.pdf.document import Document
from borb.pdf.writer import Writer

# 打开已有PDF文件
with open("example.pdf", "rb") as pdf_in:
    reader = SimplePDFReader(pdf_in)
    doc: Document = reader.read()

# 修改文档 (此处省略具体修改逻辑)

# 将修改后的文档另存为新文件
with open("output.pdf", "wb") as pdf_out:
    writer = Writer(pdf_out, doc)
    writer.write()

3. fitz (PyMuPDF)

fitz(也称为 PyMuPDF)能够高效地解析复杂的PDF结构,适合于需要提取图像或者文本的应用场景。此外,它还可以用来转换整个PDF成图片序列。

bash 复制代码
pip install pymupdf

示例代码如下所示:

python 复制代码
import fitz  # 导入模块

# 加载目标pdf
doc = fitz.open('input.pdf')

# 遍历每一页并将它们转为png格式
for page_num in range(len(doc)):
    page = doc.load_page(page_num)
    pix = page.get_pixmap(dpi=300)
    output_filename = f'page_{page_num}.png'
    pix.save(output_filename)

4. 处理大尺寸PDF的技术手段

对于较大的PDF文件,可以通过以下几种技术减少其体积:

  • 图片质量调整:降低分辨率或将高清晰度的照片替换为较低版本;
  • 字体优化:移除未使用的字符集或完全不嵌入字体数据;
  • 清理冗余项:去除隐藏层、空白页码区域以及其他无意义的内容;
相关推荐
抓不住时间的沙1 小时前
Butterfly主题 5.7 导航栏添加相册同时设置相册入口密码
css·python·node.js
风合星语1 小时前
2026 机器人工程实例(五):让 Allegro Hand 在 MuJoCo 中完成接触抓取——抓取状态机、稳定抬升与受控释放
c++·python·机器人·仿真
隐擎fox2 小时前
解构无感人机验证底层机制:行为生物轨迹采样、环境评分模型与自动化对抗实战
自动化测试·python·网络协议·tcp/ip·网络爬虫
haidao0312 小时前
氙灯光源技术特性及其在光催化实验中的标准化应用研究
人工智能·python·能源
用户0332126663672 小时前
使用 Python 设置 Excel 行列自适应 【代码示例】
python·excel
Ticnix3 小时前
RAG 的坑不在检索,在"对齐":pgvector 实战手记
python·agent·全栈
kyrie_sakura3 小时前
python学习笔记14 -- FastAPI
笔记·python·学习·fastapi
春涧草茶3 小时前
慢就是快12-2三种访问权限|getter与setter|魔法方法
开发语言·python
夜雪一千4 小时前
如何使用Python做舆情分析
人工智能·python·数据分析
Ticnix4 小时前
MCP 工具拿不到 user_id?用 contextvars 做请求级用户隔离
python·agent·mcp