Python實(shí)現(xiàn)將PDF文件拆分任意頁(yè)數(shù)
一、簡(jiǎn)介
PyMuPDF,簡(jiǎn)稱(chēng)fitz,是一個(gè)輕量級(jí)的Python庫(kù),它基于MuPDF的C++庫(kù),提供了豐富的功能,包括但不限于PDF的讀取、編輯、轉(zhuǎn)換和渲染。Fitz作為PyMuPDF的子模塊,簡(jiǎn)化和封裝了PyMuPDF的功能,使得在Python中處理PDF文件更加簡(jiǎn)單。
二、安裝
PyMuPDF(包含fitz模塊)可以通過(guò)Python的包管理器pip來(lái)安裝。
在命令行工具中輸入以下命令:
pip install PyMuPDF
這將從Python包索引下載并安裝PyMuPDF及其依賴(lài)項(xiàng)。
或者




三、基本功能
1、打開(kāi)PDF文件:
使用fitz.open()函數(shù)可以打開(kāi)一個(gè)PDF文件,并返回一個(gè)表示該文件的對(duì)象。例如:
import fitz
doc = fitz.open("example.pdf")2、獲取頁(yè)面數(shù)量:
通過(guò)page_count屬性可以獲取PDF文件的總頁(yè)數(shù)。例如:
page_count = doc.page_count
print("Number of pages:", page_count)3、提取文本:
使用get_text()方法可以提取當(dāng)前頁(yè)面的所有文本。例如:
text = page.get_text()
print("Extracted text:", text)此外,還可以遍歷文檔中的每一頁(yè),提取每一頁(yè)的文本。
4、保存修改后的PDF:
使用save()方法可以保存對(duì)PDF文件所做的更改。例如:
doc.save("modified_example.pdf")
其他功能:
- 插入新的頁(yè)面:使用
fitz.new_page()創(chuàng)建新頁(yè)面,然后使用insert_pdf()方法將新頁(yè)面插入到指定位置。 - 合并多個(gè)PDF文件:創(chuàng)建一個(gè)空的PDF文檔對(duì)象,然后遍歷要合并的PDF文件,將它們的頁(yè)面插入到新的文檔對(duì)象中,最后保存合并后的PDF。
- 提取PDF中的圖片:遍歷PDF的每一頁(yè),使用
get_images()方法獲取頁(yè)面上的所有圖像,并保存它們。 - 提取PDF中的表格:使用
find_tables()方法獲取頁(yè)面上的表格,然后可以將表格數(shù)據(jù)保存為CSV格式文件。 四、應(yīng)用場(chǎng)景
四、應(yīng)用場(chǎng)景
PyMuPDF(fitz)適用于需要處理PDF文件的各種場(chǎng)景,如文本提取、頁(yè)面操作、PDF合并與分割等。它以其快速、高效和易于使用而著稱(chēng),是處理PDF文件的理想選擇。
例如:PDF文件拆分任意頁(yè)數(shù).py
import fitz
import os
def split_pdf(pdf_path):
# 檢查輸入的PDF文件是否存在
if not os.path.exists(pdf_path):
print("您輸入的路徑無(wú)pdf文件!")
return
# 打開(kāi)pdf文件
doc = fitz.open(pdf_path)
page_count = len(doc)
print(f"該pdf文件頁(yè)數(shù)為:{page_count}")
while True:
# 獲取起始頁(yè)碼(0基索引)
page_num1 = None
while True:
try:
user_input = input("請(qǐng)輸入您拆分的起始頁(yè)碼(輸入q/Q退出):")
if user_input.lower() == 'q':
doc.close()
return
page_num1 = int(user_input) - 1
if page_num1 < 0 or page_num1 >= page_count:
print("起始頁(yè)碼無(wú)效,請(qǐng)重新輸入。")
else:
break
except ValueError:
print("請(qǐng)輸入有效的起始頁(yè)碼或q/Q退出。")
# 獲取結(jié)束頁(yè)碼(0基索引)
page_num2 = None
while True:
try:
user_input = input("請(qǐng)輸入您拆分的截止頁(yè)碼(輸入q/Q退出):")
if user_input.lower() == 'q':
doc.close()
return
page_num2 = int(user_input) - 1
if page_num2 < 0 or page_num2 >= page_count:
print("截止頁(yè)碼無(wú)效,請(qǐng)重新輸入。")
else:
break
except ValueError:
print("請(qǐng)輸入有效的截止頁(yè)碼或q/Q退出。")
# 創(chuàng)建一個(gè)新的PDF文檔并插入指定的頁(yè)面范圍
new_doc = fitz.open()
new_doc.insert_pdf(doc, from_page=page_num1, to_page=page_num2)
# 獲取用戶(hù)輸入的PDF基礎(chǔ)名字和保存目錄
pdf_base_name = input("請(qǐng)輸入您的PDF基礎(chǔ)名字:")
if not pdf_base_name.lower().endswith('.pdf'):
pdf_name = f"{pdf_base_name}_{page_num1 + 1}-{page_num2 + 1}.pdf"
else:
pdf_name = f"{pdf_base_name[:-4]}_{page_num1 + 1}-{page_num2 + 1}.pdf"
save_dir = input("請(qǐng)輸入您想要保存PDF的目錄(例如:C:/Users/YourName/Documents/):")
# 確保目錄末尾有斜杠,并檢查目錄是否存在
if not save_dir.endswith(os.sep) and save_dir != "":
save_dir += os.sep
os.makedirs(save_dir, exist_ok=True)
output_path = os.path.join(save_dir, pdf_name)
new_doc.save(output_path)
new_doc.close()
print(f"Saved: {output_path}")
# 檢查是否繼續(xù)拆分或退出
is_continue = input("是否繼續(xù)拆分其他頁(yè)面范圍(q/Q退出)?").strip().lower()
if is_continue == 'q':
doc.close()
break
# 調(diào)用函數(shù)進(jìn)行PDF拆分
pdf_path = input("請(qǐng)輸入您需要拆分的PDF路徑:")
split_pdf(pdf_path)

到此這篇關(guān)于Python實(shí)現(xiàn)將PDF文件拆分任意頁(yè)數(shù)的文章就介紹到這了,更多相關(guān)Python PDF拆分內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python的pywebview庫(kù)結(jié)合Flask和waitress開(kāi)發(fā)桌面應(yīng)用程序完整代碼
pywebview是輕量級(jí)Python庫(kù),用于創(chuàng)建跨平臺(tái)桌面應(yīng)用,結(jié)合HTML/CSS/JS界面與Python交互,支持Windows/macOS/Linux,資源占用低,可與Flask、Waitress集成,便于開(kāi)發(fā)、部署,本文給大家介紹python的pywebview庫(kù)結(jié)合Flask和waitress開(kāi)發(fā)桌面應(yīng)用程序簡(jiǎn)介,感興趣的朋友一起看看吧2025-07-07
如何使用Python修改matplotlib.pyplot.colorbar的位置以對(duì)齊主圖
使用matplotlib.colors模塊可以完成大多數(shù)常見(jiàn)的任務(wù),下面這篇文章主要給大家介紹了關(guān)于如何使用Python修改matplotlib.pyplot.colorbar的位置以對(duì)齊主圖的相關(guān)資料,需要的朋友可以參考下2022-07-07
python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解
這篇文章主要介紹了python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解的相關(guān)資料,這里提供實(shí)現(xiàn)方法,幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08
Python中調(diào)用和運(yùn)行其他.py文件的多種實(shí)現(xiàn)方法
本文介紹了在Python中調(diào)用和運(yùn)行其他.py文件的四種方法:subprocess模塊、exec函數(shù)、import語(yǔ)句和os.system函數(shù),每種方法都有其適用場(chǎng)景和優(yōu)缺點(diǎn)2025-02-02
Python列表嵌套常見(jiàn)坑點(diǎn)及解決方案
這篇文章主要介紹了Python列表嵌套常見(jiàn)坑點(diǎn)及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
python使用梯度下降算法實(shí)現(xiàn)一個(gè)多線性回歸
這篇文章主要為大家詳細(xì)介紹了python使用梯度下降算法實(shí)現(xiàn)一個(gè)多線性回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
解決tensorflow打印tensor有省略號(hào)的問(wèn)題
今天小編就為大家分享一篇解決tensorflow打印tensor有省略號(hào)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02

