Python實現PDF按頁分割:靈活拆分文檔的技術指南

Python實現PDF按頁分割:靈活拆分文檔的技術指南

PDF文件處理是日常工作中的常見需求,特別是當我們需要將大型PDF文檔拆分為多個部分時。本文將介紹如何使用Python創建一個靈活的PDF分割工具,能夠根據用戶指定的頁數范圍任意分割文檔。

需求分析

從實際案例出發,今天一個朋友給向我求助幫忙,將一份PDF文檔(75頁),需要將其分割為三個部分:

  • 第1部分:第1頁(申請表)
  • 第2部分:第2-9頁(身份證明和醫療證明)
  • 第3部分:第10頁到最后(費用明細)

這個問題用Python語言開發一個程序輕松搞定。不僅能滿足這個特定需求,還能處理任意頁數范圍的分割。

技術方案

工具選擇

  • PyPDF2:輕量級PDF處理庫,適合基本PDF操作
  • os:處理文件和目錄路徑
  • argparse:解析命令行參數

安裝依賴

pip install PyPDF2

完整代碼實現

import os
import argparse
from PyPDF2 import PdfReader, PdfWriterdef split_pdf(input_path, output_folder, ranges):"""將PDF文件按指定頁數范圍分割參數:input_path (str): 輸入PDF文件路徑output_folder (str): 輸出文件夾路徑ranges (list): 分割范圍列表,格式為[(起始頁, 結束頁), ...]"""# 確保輸出文件夾存在if not os.path.exists(output_folder):os.makedirs(output_folder)# 獲取文件名(不含擴展名)file_name = os.path.splitext(os.path.basename(input_path))[0]try:with open(input_path, 'rb') as file:reader = PdfReader(file)total_pages = len(reader.pages)print(f"開始處理: {input_path}")print(f"總頁數: {total_pages}")# 處理每個分割范圍for i, (start, end) in enumerate(ranges):# 處理結束頁為-1(表示到文檔末尾)的情況if end == -1:end = total_pages# 驗證頁碼范圍if start < 1 or end > total_pages or start > end:print(f"?? 警告: 無效的頁碼范圍 [{start}, {end}],跳過")continue# 創建PDF寫入對象writer = PdfWriter()# 添加指定范圍的頁面(PyPDF2使用0-based索引)for page_num in range(start - 1, end):writer.add_page(reader.pages[page_num])# 生成輸出文件名part_name = f"{file_name}_part{i+1}_p{start}-{end}.pdf"output_path = os.path.join(output_folder, part_name)# 寫入文件with open(output_path, 'wb') as output_file:writer.write(output_file)print(f"? 已創建: {part_name} (頁數: {start}-{end})")print(f"分割完成! 文件保存在: {output_folder}")except Exception as e:print(f"? 處理過程中發生錯誤: {str(e)}")def parse_ranges(range_str):"""解析頁數范圍字符串參數:range_str (str): 頁數范圍字符串,格式如 "1,2-9,10-"返回:list: 解析后的頁數范圍列表"""ranges = []parts = range_str.split(',')for part in parts:if '-' in part:start_end = part.split('-')start = int(start_end[0].strip())# 處理結束頁為空的特殊情況(表示到文檔末尾)if start_end[1].strip() == '':end = -1  # 使用-1表示到文檔末尾else:end = int(start_end[1].strip())else:# 單個頁碼start = int(part.strip())end = startranges.append((start, end))return rangesif __name__ == "__main__":# 設置命令行參數解析parser = argparse.ArgumentParser(description="PDF文件分割工具 - 按指定頁數范圍分割PDF文檔",formatter_class=argparse.RawTextHelpFormatter)parser.add_argument('input', help='輸入PDF文件路徑')parser.add_argument('ranges', help='頁數范圍,格式如 "1,2-9,10-"\n''示例: "1" - 僅第一頁\n''       "1-5" - 1到5頁\n''       "10-" - 從第10頁到文檔末尾\n''       "1,3-5,7-" - 多個范圍')parser.add_argument('-o', '--output', default='pdf_split_output',help='輸出文件夾 (默認: pdf_split_output)')args = parser.parse_args()# 解析頁數范圍try:ranges = parse_ranges(args.ranges)print(f"解析的分割范圍: {ranges}")# 執行PDF分割split_pdf(args.input, args.output, ranges)except ValueError:print("? 錯誤: 頁數范圍格式無效。請使用格式如 '1,2-9,10-'")except Exception as e:print(f"? 發生錯誤: {str(e)}")

使用說明

基本用法

python pdf_splitter.py 輸入文件.pdf "頁數范圍" [-o 輸出文件夾]

示例命令

  1. 分割為三個部分(第1頁、第2-9頁、第10頁到最后):

    python pdf_splitter.py "吉林省鎮賚縣*.pdf" "1,2-9,10-" -o 分割結果
    
  2. 僅提取特定頁面

    # 提取第5頁
    python pdf_splitter.py input.pdf "5"# 提取第10-15頁
    python pdf_splitter.py input.pdf "10-15"# 提取從第20頁到文檔末尾
    python pdf_splitter.py input.pdf "20-"
    
  3. 提取多個不連續范圍

    # 提取封面(1)、目錄(3-4)和正文(6-)
    python pdf_splitter.py book.pdf "1,3-4,6-"
    

輸出示例

解析的分割范圍: [(1, 1), (2, 9), (10, -1)]
開始處理: 吉林省鎮賚縣*.pdf
總頁數: 75
? 已創建: 吉林省鎮賚縣*_part1_p1-1.pdf (頁數: 1-1)
? 已創建: 吉林省鎮賚縣*_part2_p2-9.pdf (頁數: 2-9)
? 已創建: 吉林省鎮賚縣*_part3_p10-75.pdf (頁數: 10-75)
分割完成! 文件保存在: 分割結果

技術亮點

  1. 靈活的頁數范圍解析

    • 支持單頁、連續頁和到文檔末尾的表示法
    • 支持多個不連續范圍的組合
    • 智能處理頁碼邊界情況
  2. 健壯的錯誤處理

    • 無效頁碼檢測
    • 文件不存在處理
    • 格式錯誤提示
  3. 用戶友好的輸出

    • 清晰的處理進度顯示
    • 有意義的文件名生成
    • 詳細的操作結果反饋
  4. 命令行友好

    • 詳細的幫助信息
    • 直觀的參數設計
    • 默認值簡化操作

實際應用場景

  1. 文檔預處理

    • 分離封面、目錄和正文
    • 提取合同中的關鍵條款
    • 分割大型報告為多個章節
  2. 工作流程優化

    • 僅分發相關人員需要的部分
    • 創建演示材料的子集
    • 提取掃描文檔中的特定頁面
  3. 自動化處理

    • 與OCR工具集成
    • 批量處理多個文檔
    • 定時任務自動分割新文檔

擴展建議

  1. 添加GUI界面:使用PyQt或Tkinter創建圖形界面
  2. 集成OCR功能:結合pytesseract提取文本內容
  3. 添加水印功能:在分割后的文件添加特定水印
  4. 支持批量處理:處理整個文件夾的PDF文件
  5. 添加PDF壓縮:減小輸出文件大小

總結

本文介紹了一個靈活、健壯的PDF分割工具,使用Python和PyPDF2庫實現。該工具可以:

  • 按任意頁數范圍分割PDF文檔
  • 處理單個頁面或多個不連續范圍
  • 智能處理到文檔末尾的特殊情況
  • 提供清晰的操作反饋和錯誤處理

通過這個工具,我們可以輕松完成類似教師醫療資助申請文檔的分割任務,也能適應各種其他PDF處理需求。代碼設計注重靈活性和健壯性,可直接用于生產環境或作為更復雜PDF處理流程的基礎模塊。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/90955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/90955.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/90955.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

「iOS」——GCD其他方法詳解

GCD學習GCD其他方法dispatch_semaphore &#xff08;信號量&#xff09;**什么是信號量**dispatch_semaphore主要作用dispatch_semaphore主要作用異步轉同步設置一個最大開辟的線程數加鎖機制dispatch_time_t 兩種形式GCD一次性代碼(只執行一次)dispatch_barrier_async/sync柵欄…

【圖像處理基石】如何實現一個車輛檢測算法?

基于AI的車牌檢測和識別算法 問題描述、應用場景與難點 問題描述 車牌檢測和識別是計算機視覺領域的一個特定任務&#xff0c;主要包含兩個核心步驟&#xff1a; 車牌檢測&#xff1a;從圖像中準確定位車牌的位置和區域車牌識別&#xff1a;對檢測到的車牌區域進行字符識別&…

計算機學報 2025年 區塊鏈論文 錄用匯總 附pdf下載

計算機學報 Year&#xff1a;2025 2024請看 1 Title: 基于區塊鏈的動態多云多副本數據完整性審計方法研究 Authors: Key words: 區塊鏈&#xff1b;云存儲&#xff1b;多云多副本存儲&#xff1b;數據完整性審計 Abstract: 隨著云計算技術的快速發展和云存儲服務的日益…

計算機網絡-UDP協議

UDP&#xff08;用戶數據報協議&#xff09;是傳輸層的一種無連接、不可靠、輕量級的協議&#xff0c;適用于對實時性要求高、能容忍少量數據丟失的場景&#xff08;如視頻流、DNS查詢等&#xff09;。以下是UDP的詳細解析&#xff1a;1. UDP的核心特點特性說明無連接通信前無需…

子域名收集和c段查詢

子域名收集方法一、sitesite&#xff1a; 要查詢的域名可以查到相關網站二、oneforall &#xff08;子域名查找工具&#xff09;下載后解壓的文件夾在當前文件夾打開終端然后運行命令 python oneforall.py --target xxxxxxxx&#xff08;這里放你要查的網址&#xff09; run最…

計網-TCP擁塞控制

TCP的擁塞控制&#xff08;Congestion Control&#xff09;是核心機制之一&#xff0c;用于動態調整發送方的數據傳輸速率&#xff0c;避免網絡因過載而出現性能急劇下降&#xff08;如丟包、延遲激增&#xff09;。其核心思想是探測網絡可用帶寬&#xff0c;并在擁塞發生時主動…

依賴倒置原則 Dependency Inversion Principle - DIP

基本知識 1.依賴倒置原則&#xff08;DIP&#xff09;是面向對象設計&#xff08;OOD&#xff09;中的五個基本原則之一&#xff0c;通常被稱為 SOLID 原則中的 D 2.核心思想&#xff1a; 高層模塊不應該依賴低層模塊&#xff0c;兩者都應該依賴抽象。 (High-level modules sho…

原生input添加刪除圖標類似vue里面移入顯示刪除[jquery]

<input type"text" id"servicer-search" class"form-control" autocomplete"off" />上面是剛開始的input <div class"servicer-search-box"><input type"text" id"servicer-search" cla…

整理分享 | Photoshop 2025 (v26.5) 安裝記錄

導語&#xff1a; 最近整理資源時&#xff0c;發現有朋友在找新版 Photoshop。正好手邊有 Photoshop 2025年7月的版本&#xff08;v26.5&#xff09;&#xff0c;就記錄下來分享給大家&#xff0c;供有需要的朋友參考。關于這個版本&#xff1a;這個 Photoshop v26.5 安裝包&am…

【Redis】Redis 數據存儲原理和結構

一、Redis 存儲結構 1.1 KV結構 Redis 本質上是一個 Key-Value&#xff08;鍵值對&#xff0c;KV&#xff09;數據庫&#xff0c;在它豐富多樣的數據結構底層&#xff0c;都基于一種統一的鍵值對存儲結構來進行數據的管理和操作 Redis 使用一個全局的哈希表來管理所有的鍵值對…

【RAG優化】深度剖析OCR錯誤,從根源修復RAG應用的識別問題

1. 引言:OCR——RAG系統中的關鍵問題 當我們將一個包含掃描頁面的PDF或一張報告截圖扔給RAG系統時,我們期望它能“讀懂”里面的內容。這個“讀懂”的第一步,就是OCR。然而,OCR過程并非100%準確,它受到圖像質量、文字布局、字體、語言等多種因素的影響。 一個看似微不足道…

【第六節】方法與事件處理器

方法與事件處理器 方法處理器 可以用 v-on 指令監聽 DOM 事件: <div id="example"> <button v-on:click="greet">Greet</button></div>綁定一個單擊事件處理器到一個方法 greet 。下面在 Vue 實例中定義這個方法 var vm=new V…

大語言模型Claude 4簡介

Anthropic公司成立于2021年&#xff0c;由一群OpenAI前員工組成。他們最新發布的大語言模型(Large Language Model, LLM) Claude 4系列包括兩個版本&#xff1a;Claude Opus 4和Claude Sonnet 4&#xff1a;(1).Claude Sonnet 4&#xff1a;是Claude Sonnet 3.7的升級&#xff…

國產化PDF處理控件Spire.PDF教程:Python 將 PDF 轉換為 Markdown (含批量轉換示例)

PDF 是數字文檔管理的普遍格式&#xff0c;但其固定布局特性限制了在需要靈活編輯、更新或現代工作流集成場景下的應用。相比之下&#xff0c;Markdown&#xff08;.md&#xff09;語法輕量、易讀&#xff0c;非常適合網頁發布、文檔編寫和版本控制。 E-iceblue旗下Spire系列產…

PDF轉Markdown - Python 實現方案與代碼

PDF作為廣泛使用的文檔格式&#xff0c;轉換為輕量級標記語言Markdown后&#xff0c;可無縫集成到技術文檔、博客平臺和版本控制系統中&#xff0c;提高內容的可編輯性和可訪問性。本文將詳細介紹如何使用國產Spire.PDF for Python 庫將 PDF 文檔轉換為 Markdown 格式。 技術優…

深度解析 inaSpeechSegmenter:高效音頻語音分割與檢測開源工具

項目簡介 inaSpeechSegmenter 是法國國家視聽研究院(INA)開源的音頻分割與檢測工具,專為廣播、播客、采訪、影視等多媒體內容的自動化處理設計。它能夠高效地將長音頻自動分割為語音、音樂、噪聲、靜音等片段,并支持性別檢測(男聲/女聲),為后續的語音識別、內容檢索、轉…

VirtualBox安裝Ubuntu 22.04后終端無法打開的解決方案

問題現象在VirtualBox中使用"快速安裝"模式安裝Ubuntu 22.04后圖形終端&#xff08;gnome-terminal&#xff09;無法通過圖標或快捷鍵(CtrlAltT)啟動系統其他功能正常根本原因語言環境(Locale)配置異常導致&#xff1a;快速安裝模式可能跳過Locale生成步驟gnome-term…

java磁盤操作與IO流(序列化、Properties類)

目錄 一、磁盤操作 1、File類&#xff1a; &#xff08;1&#xff09;創建File對象&#xff1a; &#xff08;2&#xff09;獲取文件信息&#xff1a; &#xff08;3&#xff09;判斷文件 &#xff08;4&#xff09;刪除文件 &#xff08;5&#xff09;創建文件&#xff…

【WPF】WPF Prism 開發經驗總結:菜單命令刪除項時報 InvalidCastException 的問題分析與解決

WPF Prism 開發經驗總結&#xff1a;菜單命令刪除項時報 InvalidCastException 的問題分析與解決 在 WPF Prism 項目中使用 ContextMenu 執行刪除操作時&#xff0c;遇到一個令人疑惑的問題&#xff1a;命令綁定本身沒有問題&#xff0c;但點擊“刪除”菜單后&#xff0c;程序拋…

《WebGL打造高性能3D粒子特效系統:從0到1的技術探秘》

在游戲里,爆炸時四濺的火花、魔法釋放時閃爍的光暈;在可視化項目中,數據流動時呈現的璀璨光河,這些令人驚嘆的效果,背后離不開強大的技術支撐。而WebGL,作為在瀏覽器端實現硬件加速3D圖形渲染的技術,為我們開啟了構建高性能3D粒子特效系統的大門。 WebGL的渲染管線是整…