Python使用PyMuPDF操作PDF的代碼示例
安裝PyMuPDF
首先,你需要安裝PyMuPDF庫。你可以使用pip來安裝它:
pip install pymupdf
讀取PDF文件
讀取PDF文件并打印其頁數(shù):
import fitz
# 使用pymupdf讀取pdf文件
if __name__ == '__main__':
# 打開 PDF 文件
doc = fitz.open('example.pdf')
print(doc.page_count)
提取文本
從PDF文件中提取文本:
import fitz
# 使用Pymupdf讀取pdf文本
if __name__ == '__main__':
# 打開 PDF 文件
doc = fitz.open('example1.pdf')
print(doc.load_page(0).get_text())
拆分PDF文件
將PDF文件拆分為兩個(gè)文件,一個(gè)文件包含奇數(shù)頁,一個(gè)文件包含偶數(shù)頁:
import fitz
# 使用pymupdf將PDF文件拆分為兩個(gè)文件,一個(gè)文件包含奇數(shù)頁,一個(gè)文件包含偶數(shù)頁:
if __name__ == '__main__':
# 創(chuàng)建一個(gè) PDF 寫入器對(duì)象
odd_writer = fitz.open()
even_writer = fitz.open()
doc = fitz.open('example.pdf')
for page_num in range(doc.page_count):
if page_num % 2 == 0:
odd_writer.insert_pdf(doc, from_page=page_num, to_page=page_num)
else:
even_writer.insert_pdf(doc, from_page=page_num, to_page=page_num)
odd_writer.save('example1.pdf')
even_writer.save('example2.pdf')
合并PDF文件
你可以將多個(gè)PDF文件合并為一個(gè):
import fitz
# 使用PymuPDF合并兩個(gè)pdf文件
if __name__ == '__main__':
# 打開要合并的 PDF 文件
pdf_files = ['example1.pdf', 'example2.pdf']
# 創(chuàng)建一個(gè)新的 PDF 文檔對(duì)象
merged_doc = fitz.open()
# 遍歷每個(gè)要合并的 PDF 文件
for pdf_file in pdf_files:
# 打開當(dāng)前的 PDF 文件
temp_doc = fitz.open(pdf_file)
# 將當(dāng)前 PDF 文件的所有頁面添加到合并后的文檔中
for page_num in range(len(temp_doc)):
merged_doc.insert_pdf(temp_doc, from_page=page_num, to_page=page_num)
# 關(guān)閉當(dāng)前的 PDF 文件(不需要保存,因?yàn)槲覀冎皇亲x取它)
temp_doc.close()
# 保存合并后的 PDF 文件
merged_doc.save("merged.pdf")
裁剪PDF頁面
PyPDF2并不直接支持裁剪頁面,但你可以通過提取頁面的部分內(nèi)容并創(chuàng)建一個(gè)新的頁面來實(shí)現(xiàn)這一功能。以下是一個(gè)簡(jiǎn)單的示例,演示如何裁剪頁面的上半部分:
import fitz
# 使用pymupdf裁剪PDF頁面
if __name__ == '__main__':
# 打開 PDF 文件
doc = fitz.open("example.pdf")
# 選擇要裁剪的頁面(例如第一頁)
page = doc.load_page(0)
# 定義裁剪區(qū)域(矩形,格式為 [x0, y0, x1, y1])
# 這里我們裁剪頁面的上半部分
rect = [page.rect.x0, page.rect.y0, page.rect.x1, page.rect.y0 + (page.rect.height / 2)]
# 裁剪頁面(這會(huì)改變?cè)柬撁妫?
page.set_cropbox(rect)
page.clean_contents() # 清理頁面內(nèi)容(可選,但推薦)
# 保存修改后的 PDF 文件
doc.save("cropped_example.pdf")
加密PDF
import fitz
# 使用PyPDF2加密pdf
if __name__ == '__main__':
doc = fitz.open("example.pdf")
# 設(shè)置加密參數(shù)
doc.save(
"encrypted.pdf",
encryption=fitz.PDF_ENCRYPT_AES_256, # 加密算法
user_pw="password123", # 用戶密碼(打開密碼)
owner_pw="password123", # 所有者密碼
permissions=0b1111000000, # 權(quán)限標(biāo)志
garbage=3, # 清理冗余數(shù)據(jù)
deflate=True, # 壓縮內(nèi)容
)
與pypdf2的比較
PyPDF2:
基礎(chǔ)操作:專注于PDF的合并、拆分、頁面旋轉(zhuǎn)、加密/解密、添加水印等基礎(chǔ)功能。
文本提?。褐С趾?jiǎn)單文本提取,但對(duì)復(fù)雜布局(如雙欄排版、表格)的支持較弱,可能破壞文本順序。
輕量級(jí):適合輕量級(jí)任務(wù),如快速合并多個(gè)文檔或添加密碼保護(hù)。
大文件處理:處理大文件(如7000頁以上)時(shí)速度較慢(需數(shù)百秒),內(nèi)存占用較高。
復(fù)雜文檔兼容性:對(duì)含復(fù)雜圖形、表單或加密文件的處理可能失敗,文本提取易出現(xiàn)亂碼。
PyMuPDF:
全能處理:支持PDF的讀取、編輯、合并、拆分,同時(shí)能提取文本、圖像、表格,甚至支持OCR識(shí)別和PDF轉(zhuǎn)圖像。
高級(jí)功能:可解析表格(保留列表結(jié)構(gòu))、處理注釋和表單、生成PDF/A格式文檔,以及通過Tesseract集成實(shí)現(xiàn)OCR。
多格式支持:兼容PDF、XPS、CBZ等格式,適用場(chǎng)景更廣泛。
大文件處理:基于MuPDF引擎,采用優(yōu)化算法,處理同樣文件僅需幾秒,支持多線程加速,渲染圖像效率更高。
復(fù)雜文檔兼容性:在處理掃描件、加密文檔時(shí)表現(xiàn)更穩(wěn)定,且能保留雙欄文本的原始順序
以上就是Python使用PyMuPDF操作PDF的代碼示例的詳細(xì)內(nèi)容,更多關(guān)于Python PyMuPDF操作PDF的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
通俗的講解深度學(xué)習(xí)中CUDA,cudatookit,cudnn和pytorch的關(guān)系
有些剛?cè)胄械呐笥芽偸歉悴磺宄﨏UDA,cudatookit,cudnn和pytorch的關(guān)系,那么今天這篇文章用通俗易懂的話講解了他們之間的關(guān)系,需要的朋友可以參考下,相信會(huì)對(duì)你有所幫助2023-03-03
用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的多線程TCP服務(wù)器的教程
這篇文章主要介紹了用Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的多線程TCP服務(wù)器的教程,示例的運(yùn)行環(huán)境為Windows操作系統(tǒng),需要的朋友可以參考下2015-05-05
Python隨手筆記之標(biāo)準(zhǔn)類型內(nèi)建函數(shù)
Python提供了一些內(nèi)建函數(shù)用于基本對(duì)象類型:cmp(),repr(),str(),type()和等同于repr()的(' ')操作符,本文給大家分享Python隨手筆記之標(biāo)準(zhǔn)類型內(nèi)建函數(shù),對(duì)python內(nèi)建函數(shù)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2015-12-12
詳解Appium+Python之生成html測(cè)試報(bào)告
這篇文章主要介紹了詳解Appium+Python之生成html測(cè)試報(bào)告,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01
在echarts中圖例legend和坐標(biāo)系grid實(shí)現(xiàn)左右布局實(shí)例
這篇文章主要介紹了在echarts中圖例legend和坐標(biāo)系grid實(shí)現(xiàn)左右布局實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
解決運(yùn)行django程序出錯(cuò)問題 ''str''object has no attribute''_meta''
這篇文章主要介紹了解決運(yùn)行django程序出錯(cuò)問題 'str'object has no attribute'_meta',具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07

