Python使用PyMuPDF(fitz)處理PDF文檔的操作指南
使用 PyMuPDF (fitz) 處理 PDF 文檔
PyMuPDF 是一個(gè)功能強(qiáng)大且高效的 Python PDF 處理庫,它基于 MuPDF 引擎,提供了豐富的 PDF 操作功能。以下是詳細(xì)使用方法:
安裝 PyMuPDF
pip install pymupdf
基礎(chǔ)功能示例
1. 打開和讀取 PDF 文檔
import fitz # PyMuPDF 的導(dǎo)入名稱 # 打開 PDF 文件 doc = fitz.open("example.pdf") # 獲取文檔信息 print(f"頁數(shù): {doc.page_count}") print(f"元數(shù)據(jù): {doc.metadata}") # 讀取第一頁文本 page = doc.load_page(0) # 0 表示第一頁 text = page.get_text() print(text) # 關(guān)閉文檔 doc.close()
2. 提取頁面內(nèi)容
# 提取所有頁面文本 for page_num in range(doc.page_count): page = doc.load_page(page_num) print(f"第 {page_num+1} 頁內(nèi)容:") 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
高級(jí)功能
1. 搜索文本
# 在整個(gè)文檔中搜索特定文本 for page_num in range(doc.page_count): page = doc.load_page(page_num) text_instances = page.search_for("搜索關(guān)鍵詞") 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]) # 文本內(nèi)容在元組的第5個(gè)位置
3. 處理 PDF 鏈接和書簽
# 獲取所有鏈接 links = page.get_links() for link in links: if link["kind"] == fitz.LINK_URI: # 網(wǎng)頁鏈接 print(f"找到URL鏈接: {link['uri']}") # 獲取文檔書簽 toc = doc.get_toc() # 獲取目錄 for item in toc: print(f"層級(jí) {item[0]}, 標(biāo)題: {item[1]}, 頁碼: {item[2]}")
4. 修改 PDF 文檔
# 創(chuàng)建新文檔 new_doc = fitz.open() # 從原文檔復(fù)制頁面 new_doc.insert_pdf(doc, from_page=0, to_page=2) # 復(fù)制前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()
性能優(yōu)化技巧
- 批量處理頁面:
# 高效處理多頁 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頁
常見問題解決
- 中文顯示問題:
# 確保系統(tǒng)有中文字體 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的首選。對(duì)于需要高性能PDF處理的場景,它是最佳選擇。
到此這篇關(guān)于Python使用PyMuPDF(fitz)處理PDF文檔的操作指南的文章就介紹到這了,更多相關(guān)Python PyMuPDF處理PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)Logger打印功能的方法詳解
最近工作中遇到了打印的需求,通過查找相關(guān)的資料發(fā)現(xiàn)Python中Logger可以很好的實(shí)現(xiàn)打印,所以下面這篇文章主要給大家介紹了關(guān)于Python如何實(shí)現(xiàn)Logger打印功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-09-09Python循環(huán)語句For?Range用法示例詳解
這篇文章主要為大家介紹了Python循環(huán)語句For?Range用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09Python統(tǒng)計(jì)列表中的重復(fù)項(xiàng)出現(xiàn)的次數(shù)的方法
這篇文章主要介紹了Python統(tǒng)計(jì)列表中的重復(fù)項(xiàng)出現(xiàn)的次數(shù)的方法,需要的朋友可以參考下2014-08-08python基于itchat實(shí)現(xiàn)微信群消息同步機(jī)器人
本篇文章主要介紹了python基于itchat實(shí)現(xiàn)微信群消息同步機(jī)器人,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02Python中pillow知識(shí)點(diǎn)學(xué)習(xí)
本文給大家通過一篇Python中pillow知識(shí)點(diǎn)學(xué)習(xí)的筆記內(nèi)容讓大家對(duì)pillow有一個(gè)學(xué)習(xí)方向的有一個(gè)認(rèn)識(shí),有興趣的朋友學(xué)習(xí)下。2018-04-04Django Rest framework認(rèn)證組件詳細(xì)用法
這篇文章主要介紹了Django Rest framework認(rèn)證組件詳細(xì)用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07TensorFlow教程Softmax邏輯回歸識(shí)別手寫數(shù)字MNIST數(shù)據(jù)集
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)的TensorFlow教程基于Softmax邏輯回歸識(shí)別手寫數(shù)字的MNIST數(shù)據(jù)集示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11