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文件拆分為兩個文件,一個文件包含奇數(shù)頁,一個文件包含偶數(shù)頁:
import fitz # 使用pymupdf將PDF文件拆分為兩個文件,一個文件包含奇數(shù)頁,一個文件包含偶數(shù)頁: if __name__ == '__main__': # 創(chuàng)建一個 PDF 寫入器對象 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文件
你可以將多個PDF文件合并為一個:
import fitz # 使用PymuPDF合并兩個pdf文件 if __name__ == '__main__': # 打開要合并的 PDF 文件 pdf_files = ['example1.pdf', 'example2.pdf'] # 創(chuàng)建一個新的 PDF 文檔對象 merged_doc = fitz.open() # 遍歷每個要合并的 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 文件(不需要保存,因為我們只是讀取它) temp_doc.close() # 保存合并后的 PDF 文件 merged_doc.save("merged.pdf")
裁剪PDF頁面
PyPDF2并不直接支持裁剪頁面,但你可以通過提取頁面的部分內(nèi)容并創(chuàng)建一個新的頁面來實(shí)現(xià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)] # 裁剪頁面(這會改變原始頁面) 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ǔ)功能。
文本提取:支持簡單文本提取,但對復(fù)雜布局(如雙欄排版、表格)的支持較弱,可能破壞文本順序。
輕量級:適合輕量級任務(wù),如快速合并多個文檔或添加密碼保護(hù)。
大文件處理:處理大文件(如7000頁以上)時速度較慢(需數(shù)百秒),內(nèi)存占用較高。
復(fù)雜文檔兼容性:對含復(fù)雜圖形、表單或加密文件的處理可能失敗,文本提取易出現(xiàn)亂碼。
PyMuPDF:
全能處理:支持PDF的讀取、編輯、合并、拆分,同時能提取文本、圖像、表格,甚至支持OCR識別和PDF轉(zhuǎn)圖像。
高級功能:可解析表格(保留列表結(jié)構(gòu))、處理注釋和表單、生成PDF/A格式文檔,以及通過Tesseract集成實(shí)現(xiàn)OCR。
多格式支持:兼容PDF、XPS、CBZ等格式,適用場景更廣泛。
大文件處理:基于MuPDF引擎,采用優(yōu)化算法,處理同樣文件僅需幾秒,支持多線程加速,渲染圖像效率更高。
復(fù)雜文檔兼容性:在處理掃描件、加密文檔時表現(xiàn)更穩(wěn)定,且能保留雙欄文本的原始順序
以上就是Python使用PyMuPDF操作PDF的代碼示例的詳細(xì)內(nèi)容,更多關(guān)于Python PyMuPDF操作PDF的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解如何使用pandas進(jìn)行時間序列數(shù)據(jù)的周期轉(zhuǎn)換
時間序列數(shù)據(jù)是數(shù)據(jù)分析中經(jīng)常遇到的類型,為了更多的挖掘出數(shù)據(jù)內(nèi)部的信息,我們常常依據(jù)原始數(shù)據(jù)中的時間周期,將其轉(zhuǎn)換成不同跨度的周期,下面以模擬的K線數(shù)據(jù)為例,演示如何使用pandas來進(jìn)行周期轉(zhuǎn)換,感興趣的朋友可以參考下2024-05-05使用coverage統(tǒng)計python web項目代碼覆蓋率的方法詳解
這篇文章主要介紹了使用coverage統(tǒng)計python web項目代碼覆蓋率的方法,詳細(xì)分析了coverage的安裝以及coverage命令統(tǒng)計py文件相關(guān)操作技巧,需要的朋友可以參考下2019-08-08Python實(shí)現(xiàn)對字符串中字符提取校驗
眾所周知,python之所以很方便在一定程度上是因為隨時都可能有人又創(chuàng)作了一個好用又方便的python非標(biāo)準(zhǔn)庫。本文就來用Python實(shí)現(xiàn)對字符串中字符進(jìn)行提取校驗,需要的可以參考一下2022-10-10Python實(shí)現(xiàn)文件壓縮和解壓的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)文件壓縮和解壓的方法,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-08-08