Python實(shí)現(xiàn)將PDF文件拆分任意頁數(shù)
一、簡介
PyMuPDF,簡稱fitz,是一個(gè)輕量級(jí)的Python庫,它基于MuPDF的C++庫,提供了豐富的功能,包括但不限于PDF的讀取、編輯、轉(zhuǎn)換和渲染。Fitz作為PyMuPDF的子模塊,簡化和封裝了PyMuPDF的功能,使得在Python中處理PDF文件更加簡單。
二、安裝
PyMuPDF(包含fitz模塊)可以通過Python的包管理器pip來安裝。
在命令行工具中輸入以下命令:
pip install PyMuPDF
這將從Python包索引下載并安裝PyMuPDF及其依賴項(xiàng)。
或者
三、基本功能
1、打開PDF文件:
使用fitz.open()
函數(shù)可以打開一個(gè)PDF文件,并返回一個(gè)表示該文件的對象。例如:
import fitz doc = fitz.open("example.pdf")
2、獲取頁面數(shù)量:
通過page_count
屬性可以獲取PDF文件的總頁數(shù)。例如:
page_count = doc.page_count print("Number of pages:", page_count)
3、提取文本:
使用get_text()
方法可以提取當(dāng)前頁面的所有文本。例如:
text = page.get_text() print("Extracted text:", text)
此外,還可以遍歷文檔中的每一頁,提取每一頁的文本。
4、保存修改后的PDF:
使用save()
方法可以保存對PDF文件所做的更改。例如:
doc.save("modified_example.pdf")
其他功能:
- 插入新的頁面:使用
fitz.new_page()
創(chuàng)建新頁面,然后使用insert_pdf()
方法將新頁面插入到指定位置。 - 合并多個(gè)PDF文件:創(chuàng)建一個(gè)空的PDF文檔對象,然后遍歷要合并的PDF文件,將它們的頁面插入到新的文檔對象中,最后保存合并后的PDF。
- 提取PDF中的圖片:遍歷PDF的每一頁,使用
get_images()
方法獲取頁面上的所有圖像,并保存它們。 - 提取PDF中的表格:使用
find_tables()
方法獲取頁面上的表格,然后可以將表格數(shù)據(jù)保存為CSV格式文件。 四、應(yīng)用場景
四、應(yīng)用場景
PyMuPDF(fitz)適用于需要處理PDF文件的各種場景,如文本提取、頁面操作、PDF合并與分割等。它以其快速、高效和易于使用而著稱,是處理PDF文件的理想選擇。
例如:PDF文件拆分任意頁數(shù).py
import fitz import os def split_pdf(pdf_path): # 檢查輸入的PDF文件是否存在 if not os.path.exists(pdf_path): print("您輸入的路徑無pdf文件!") return # 打開pdf文件 doc = fitz.open(pdf_path) page_count = len(doc) print(f"該pdf文件頁數(shù)為:{page_count}") while True: # 獲取起始頁碼(0基索引) page_num1 = None while True: try: user_input = input("請輸入您拆分的起始頁碼(輸入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("起始頁碼無效,請重新輸入。") else: break except ValueError: print("請輸入有效的起始頁碼或q/Q退出。") # 獲取結(jié)束頁碼(0基索引) page_num2 = None while True: try: user_input = input("請輸入您拆分的截止頁碼(輸入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("截止頁碼無效,請重新輸入。") else: break except ValueError: print("請輸入有效的截止頁碼或q/Q退出。") # 創(chuàng)建一個(gè)新的PDF文檔并插入指定的頁面范圍 new_doc = fitz.open() new_doc.insert_pdf(doc, from_page=page_num1, to_page=page_num2) # 獲取用戶輸入的PDF基礎(chǔ)名字和保存目錄 pdf_base_name = input("請輸入您的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("請輸入您想要保存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ù)拆分其他頁面范圍(q/Q退出)?").strip().lower() if is_continue == 'q': doc.close() break # 調(diào)用函數(shù)進(jìn)行PDF拆分 pdf_path = input("請輸入您需要拆分的PDF路徑:") split_pdf(pdf_path)
到此這篇關(guān)于Python實(shí)現(xiàn)將PDF文件拆分任意頁數(shù)的文章就介紹到這了,更多相關(guān)Python PDF拆分內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python數(shù)據(jù)分析Matplotlib?柱狀圖繪制
本文主要介紹了Python數(shù)據(jù)分析Matplotlib柱狀圖繪制,Matplotlib提供了bar()方法繪制柱狀圖,下面具體繪制介紹需要的小伙伴可以參考以一下2022-05-05Python實(shí)現(xiàn)刪除列表首元素的多種方式總結(jié)
在Python中,處理列表的操作是日常開發(fā)中不可避免的任務(wù)之一,其中,刪除列表中的元素是一個(gè)常見的需求,本文為大家整理了Python中刪除列表中的第一個(gè)元素的多種方法,需要的可以參考下2023-12-12Python Socket庫基礎(chǔ)方法與應(yīng)用詳解
這篇文章主要介紹了關(guān)于Python socket庫的詳細(xì)技術(shù)解析,包含基礎(chǔ)方法說明、工作原理剖析,以及多個(gè)應(yīng)用領(lǐng)域的完整實(shí)現(xiàn)代碼,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2025-04-04Python實(shí)現(xiàn)數(shù)據(jù)透視表詳解
今天小編就為大家分享一篇用Python實(shí)現(xiàn)數(shù)據(jù)的透視表的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-10-10Restful_framework視圖組件代碼實(shí)例解析
這篇文章主要介紹了Restful_framework視圖組件代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Python+OpenCV實(shí)現(xiàn)單個(gè)圓形孔和針檢測
這篇文章主要為大家詳細(xì)介紹了如何通過Python+OpenCV實(shí)現(xiàn)單個(gè)圓形孔和針檢測功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-10-10使用python提取html文件中的特定數(shù)據(jù)的實(shí)現(xiàn)代碼
python提供了SGMLParser類用于html文件的解析。用戶只需從SGMLParser類繼承子類,并在子類中對html文件做具體處理2013-03-03