使用 pymupdf (fitz) 处理 pdf 文档
pymupdf 是一个功能强大且高效的 python pdf 处理库,它基于 mupdf 引擎,提供了丰富的 pdf 操作功能。以下是详细使用方法:
安装 pymupdf
pip install pymupdf
基础功能示例
1. 打开和读取 pdf 文档
import fitz # pymupdf 的导入名称 # 打开 pdf 文件 doc = fitz.open("example.pdf") # 获取文档信息 print(f"页数: {doc.page_count}") print(f"元数据: {doc.metadata}") # 读取第一页文本 page = doc.load_page(0) # 0 表示第一页 text = page.get_text() print(text) # 关闭文档 doc.close()
2. 提取页面内容
# 提取所有页面文本 for page_num in range(doc.page_count): page = doc.load_page(page_num) print(f"第 {page_num+1} 页内容:") print(page.get_text())
3. 渲染 pdf 为图像
# 将第一页渲染为图像 page = doc.load_page(0) pix = page.get_pixmap(matrix=fitz.matrix(2, 2)) # 2倍缩放提高清晰度 pix.save("page0.png") # 保存为png
高级功能
1. 搜索文本
# 在整个文档中搜索特定文本 for page_num in range(doc.page_count): page = doc.load_page(page_num) text_instances = page.search_for("搜索关键词") for inst in text_instances: print(f"在第 {page_num+1} 页找到匹配:") print(f"位置: {inst}")
2. 提取带格式的文本
# 提取带格式的文本(保留布局) text = page.get_text("blocks") # 返回文本块列表 for block in text: print(block[4]) # 文本内容在元组的第5个位置
3. 处理 pdf 链接和书签
# 获取所有链接 links = page.get_links() for link in links: if link["kind"] == fitz.link_uri: # 网页链接 print(f"找到url链接: {link['uri']}") # 获取文档书签 toc = doc.get_toc() # 获取目录 for item in toc: print(f"层级 {item[0]}, 标题: {item[1]}, 页码: {item[2]}")
4. 修改 pdf 文档
# 创建新文档 new_doc = fitz.open() # 从原文档复制页面 new_doc.insert_pdf(doc, from_page=0, to_page=2) # 复制前3页 # 添加新页面 new_page = new_doc.new_page(width=595, height=842) # a4尺寸 new_page.insert_text((100, 100), "这是新添加的文本") # 保存修改后的文档 new_doc.save("modified.pdf") new_doc.close()
性能优化技巧
- 批量处理页面:
# 高效处理多页 with fitz.open("large.pdf") as doc: for page in doc: # 直接迭代比load_page更快 text = page.get_text()
- 并行处理:
from concurrent.futures import threadpoolexecutor def process_page(page_num): with fitz.open("large.pdf") as doc: page = doc.load_page(page_num) return page.get_text() with threadpoolexecutor() as executor: results = list(executor.map(process_page, range(doc.page_count)))
- 选择性加载:
# 只加载需要的页面 doc = fitz.open("large.pdf") page = doc[10] # 直接访问第11页
常见问题解决
- 中文显示问题:
# 确保系统有中文字体 text = page.get_text("text", flags=fitz.text_preserve_ligatures)
- 加密pdf处理:
doc = fitz.open("encrypted.pdf", password="123456")
- pdf/a兼容性检查:
if doc.can_save_incrementally(): print("支持增量保存")
pymupdf 以其出色的性能(比其他库快5-10倍)和丰富的功能成为处理pdf的首选。对于需要高性能pdf处理的场景,它是最佳选择。
到此这篇关于python使用pymupdf(fitz)处理pdf文档的操作指南的文章就介绍到这了,更多相关python pymupdf处理pdf内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论