最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python使用PyPDF2輕松實(shí)現(xiàn)pdf的拆分與合并

 更新時(shí)間:2026年04月15日 09:23:27   作者:一位代碼  
日常工作中使用?pdf?文件時(shí),拆分與合并是一個(gè)十分常見(jiàn)的操作,本文詳細(xì)介紹了使用Python3和PyPDF2庫(kù)實(shí)現(xiàn)PDF文件的拆分與合并操作,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下

背景

日常工作中使用 pdf 文件時(shí),拆分與合并是一個(gè)十分常見(jiàn)的操作。

特別是在使用問(wèn)答形式的 AI 工具時(shí),部分工具可能對(duì) pdf 文件的大小有一定的限制,這時(shí)就需要將原來(lái)的大 pdf 文件拆分為若干個(gè)小文件。

當(dāng)需要拆分和合并的 pdf 量級(jí)較少時(shí),通過(guò)一些在線工具或桌面應(yīng)用就可以很好的解決;但當(dāng)需要批量處理時(shí),可通過(guò)幾句簡(jiǎn)單的 python 代碼來(lái)實(shí)現(xiàn)。

以下基于 python 3.X 環(huán)境 + PyPDF2 第三方庫(kù),從多個(gè)實(shí)際使用場(chǎng)景出發(fā),梳理出了一些可直接復(fù)制粘貼使用的完整代碼及一些常見(jiàn)注意事項(xiàng)。

拆分,包括:逐頁(yè)拆分、連續(xù)頁(yè)拆分、指定頁(yè)拆分(可以為非連續(xù)頁(yè))。

合并,包括:多個(gè)合并成一個(gè)、在原文件后添加一頁(yè)。

環(huán)境安裝

本文所有用法均是基于第三方庫(kù) PyPDF2 ,該庫(kù)可直接通過(guò) pip 命令實(shí)現(xiàn)安裝。

完整命令如下:

pip install PyPDF2

需要注意的是:PyPDF2 本身不支持 python 2.X,因此本文的所有用法都是基于 python 3.X 版本。

pdf 拆分

逐頁(yè)拆分

逐頁(yè)拆分 pdf ,即將原 pdf 中的每一頁(yè)拆分為單獨(dú)的 pdf,這種做法較為少用。

可作為了解 PyPDF2 基礎(chǔ)用法的參考,復(fù)制以下代碼,將路徑修改為自己需要拆分的 pdf 路徑,運(yùn)行即可。

from PyPDF2 import PdfReader, PdfWriter
import os
#  逐頁(yè)拆分pdf,將pdf中的每一頁(yè)拆分為單獨(dú)的pdf
def split_pdf(input_pdf_path, output_dir):
    # 創(chuàng)建 PdfReader 對(duì)象
    reader = PdfReader(input_pdf_path)
    # 遍歷原 PDF d的每一頁(yè),逐頁(yè)拆分
    for page_number in range(len(reader.pages)):
        output_path = os.path.join(output_dir, f"page_{page_number}.pdf")
        writer = PdfWriter()
        writer.add_page(reader.pages[page_number])
        with open(output_path, "wb") as output_file:
            writer.write(output_file)
        print(f"Page {page_number + 1} saved to {output_path}")
if __name__=="__main__":
    # 需要拆分的PDF完整路徑
    input_pdf = 'data/test.pdf'
    # 逐頁(yè)拆分后每個(gè)單獨(dú)PDF保存的文件夾路徑,注意是文件夾的路徑
    output_file = 'data/'
    split_pdf(input_pdf,output_file)

上述代碼,以 test.pdf 為例,運(yùn)行后的結(jié)果如下圖:

連續(xù)頁(yè)拆分

連續(xù)頁(yè)拆分,即提取原 pdf 中連續(xù)的幾頁(yè)。

如:原 test.pdf 中一共有 5 頁(yè),需要將第 2 頁(yè)、第 3 頁(yè)提取出來(lái)作為一個(gè)新的 pdf 文件。完整代碼如下。

from PyPDF2 import PdfReader, PdfWriter
import os
# 指定連續(xù)頁(yè)拆分pdf
def split_page_pdf(input_pdf_path, output_pdf_path,start_num,end_num):
    # 創(chuàng)建 PdfReader 對(duì)象
    reader = PdfReader(input_pdf_path)
    # 創(chuàng)建 PdfWriter 對(duì)象
    writer = PdfWriter()
    # 指定連續(xù)的頁(yè)碼
    for page_number in range(start_num,end_num):
        writer.add_page(reader.pages[page_number])
    # 保存到新pdf
    with open(output_pdf_path, "wb") as output_file:
        writer.write(output_file)
if __name__=="__main__":
    # 需要拆分的PDF完整路徑
    input_pdf = 'data/test.pdf'
    # 拆分PDF保存的完整路徑
    output_pdf = 'data/test1.pdf'
    split_page_pdf(input_pdf,output_pdf,1,3)

復(fù)制上述代碼,將文件路徑和需要提取的連續(xù)頁(yè)碼修改為自己需要的即可。

需要注意的是:代碼中的頁(yè)碼從 0 開(kāi)始,區(qū)間為左閉右開(kāi)。如上面的【1,3】中的 1 代表的是第 2 頁(yè)。

指定頁(yè)拆分

指定頁(yè)拆分,即是提取原 pdf 中的其中幾頁(yè),不一定是連續(xù)的頁(yè)。

如:原 test.pdf 中一共有 5 頁(yè),需要將第 1 頁(yè)、第 3 頁(yè)、第 5 頁(yè)提取出來(lái)作為一個(gè)新的 pdf 文件。完整代碼如下:

from PyPDF2 import PdfReader, PdfWriter
# 指定頁(yè)拆分pdf
def split_page_pdf(input_pdf_path, output_pdf_path,page_list):
    # 創(chuàng)建 PdfReader 對(duì)象
    reader = PdfReader(input_pdf_path)
    # 創(chuàng)建 PdfWriter 對(duì)象
    writer = PdfWriter()
    for page_number in page_list:
        writer.add_page(reader.pages[page_number])
    # 保存到新pdf
    with open(output_pdf_path, "wb") as output_file:
        writer.write(output_file)
if __name__=="__main__":
    # 需要拆分的PDF完整路徑
    input_pdf = 'data/test.pdf'
    # 拆分PDF保存的完整路徑
    output_pdf = 'data/test2.pdf'
    # 指定需要的pdf頁(yè)碼列表
    page_list = [0, 2, 4]
    split_page_pdf(input_pdf,output_pdf,page_list)

復(fù)制上述代碼,將文件路徑和需要提取的指定頁(yè)的頁(yè)碼修改為自己需要的即可。

需要注意的是:代碼中的頁(yè)碼從 0 開(kāi)始。如上面的【0,2,4】,分別指的是第 1、3、5 頁(yè)。

pdf 合并

相對(duì)拆分來(lái)說(shuō),pdf 合并的場(chǎng)景較少一點(diǎn),“多個(gè)合并成一個(gè)”和“在原文件后添加一頁(yè)”(可視為 2 個(gè) pdf 的合并)的使用方式是一樣的。

完整代碼如下。復(fù)制上述代碼,將需要合并的 pdf 文件路徑和保存的合并后的文件路徑改為自己需要的即可。

from PyPDF2 import PdfMerger
# 合并pdf
def merger_pdf(input_pdf,output_filename):
    merger = PdfMerger()
    for pdf_info in input_pdf:
        merger.append(pdf_info)
    with open(output_filename, "wb") as f_out:
        merger.write(f_out)
    print('合并完成!')
if __name__=="__main__":
    # 需要合并的pdf文件完整路徑列表
    pdf_list = ['data/page_0.pdf','data/page_4.pdf']
    # 傳入需要合并的pdf文件完整路徑列表,和合并后的文件路徑及名稱(chēng)
    merger_pdf(pdf_list,'data/page_test.pdf')

以上就是基于 python 3.X + PyPDF2 的常見(jiàn)拆分與合并使用代碼塊,可供參考。

進(jìn)階技巧:旋轉(zhuǎn)頁(yè)面與提取文本

頁(yè)面旋轉(zhuǎn):對(duì)于掃描件中方向錯(cuò)誤的頁(yè)面,你可以使用 page.rotate(angle) 方法來(lái)旋轉(zhuǎn)頁(yè)面。需要注意的是,這個(gè)旋轉(zhuǎn)操作必須在將頁(yè)面添加到 PdfWriter 之前完成。

# 示例:在添加頁(yè)面前將其順時(shí)針旋轉(zhuǎn)90度
page = reader.pages[0]
page.rotate(90)  # 順時(shí)針旋轉(zhuǎn)90度
writer.add_page(page)

提取文本PyPDF2 可以從PDF中提取文字,但性能相對(duì)一般,對(duì)于復(fù)雜的排版或掃描件效果可能不佳。

# 示例:提取第一頁(yè)的所有文本
reader = PdfReader('source.pdf')
first_page = reader.pages[0]
text = first_page.extract_text()
print(text)

注意事項(xiàng)與提示

  • 處理加密PDF:如果PDF文件設(shè)置了打開(kāi)密碼,你需要先使用 reader.decrypt('密碼') 方法來(lái)解鎖,然后才能進(jìn)行后續(xù)的讀取和頁(yè)面提取操作。
  • 批量處理:當(dāng)需要處理大量PDF文件時(shí),可以結(jié)合 os 和 glob 模塊來(lái)遍歷指定目錄下的所有 .pdf 文件,然后調(diào)用上面的合并函數(shù),實(shí)現(xiàn)批量化自動(dòng)化操作。
  • 錯(cuò)誤處理:為了代碼的健壯性,建議在文件操作時(shí)使用 try...except 塊來(lái)捕獲 FileNotFoundError(文件不存在)或 PyPDF2.errors.PdfReadError(PDF格式錯(cuò)誤)等常見(jiàn)異常。

到此這篇關(guān)于Python使用PyPDF2輕松實(shí)現(xiàn)pdf的拆分與合并的文章就介紹到這了,更多相關(guān)Python PyPDF2拆分與合并pdf內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)批量下載圖片的方法

    Python實(shí)現(xiàn)批量下載圖片的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)批量下載圖片的方法,涉及Python基于urllib、urllib2及re等模塊獲取URL及正則匹配下載圖片的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • DJango的創(chuàng)建和使用詳解(默認(rèn)數(shù)據(jù)庫(kù)sqlite3)

    DJango的創(chuàng)建和使用詳解(默認(rèn)數(shù)據(jù)庫(kù)sqlite3)

    今天小編就為大家分享一篇DJango的創(chuàng)建和使用詳解(默認(rèn)數(shù)據(jù)庫(kù)sqlite3),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • 舉例講解Python裝飾器

    舉例講解Python裝飾器

    這篇文章主要介紹了Python裝飾器的相關(guān)資料,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 使用Pandas對(duì)數(shù)據(jù)進(jìn)行篩選和排序的實(shí)現(xiàn)

    使用Pandas對(duì)數(shù)據(jù)進(jìn)行篩選和排序的實(shí)現(xiàn)

    這篇文章主要介紹了使用Pandas對(duì)數(shù)據(jù)進(jìn)行篩選和排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python的open函數(shù)常見(jiàn)用法

    python的open函數(shù)常見(jiàn)用法

    python打開(kāi)文件使用open()函數(shù),返回一個(gè)指向文件的指針,這篇文章主要介紹了python的open函數(shù)使用,需要的朋友可以參考下
    2022-11-11
  • 解決Python print輸出不換行沒(méi)空格的問(wèn)題

    解決Python print輸出不換行沒(méi)空格的問(wèn)題

    今天小編就為大家分享一篇解決Python print輸出不換行沒(méi)空格的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 安裝Python后IDA中找不到Python模塊的問(wèn)題解決

    安裝Python后IDA中找不到Python模塊的問(wèn)題解決

    有天在一臺(tái)新PC上安裝完IDA和Python之后,啟動(dòng)IDA報(bào)找不到Python模塊的問(wèn)題,本文就詳細(xì)的介紹一下解決方法,感興趣的可以了解一下
    2021-10-10
  • Python實(shí)現(xiàn)服務(wù)端渲染SSR的示例代碼

    Python實(shí)現(xiàn)服務(wù)端渲染SSR的示例代碼

    服務(wù)端渲染是一種常見(jiàn)的技術(shù)策略,特別是在需要改善網(wǎng)站的搜索引擎優(yōu)化(SEO)和首屏加載時(shí)間的場(chǎng)景下,本文將介紹如何利用?Python?實(shí)現(xiàn)?SSR,感興趣的可以了解下
    2024-02-02
  • 零基礎(chǔ)學(xué)python應(yīng)該從哪里入手

    零基礎(chǔ)學(xué)python應(yīng)該從哪里入手

    在本篇文章里小編給大家分享的是一篇關(guān)于零基礎(chǔ)學(xué)python應(yīng)該從哪里入手的相關(guān)基礎(chǔ)內(nèi)容,需要的朋友們可以參考下。
    2020-08-08
  • 如何用Python從桌面讀取二維碼信息詳解

    如何用Python從桌面讀取二維碼信息詳解

    二維碼作為一種信息傳遞的工具,在當(dāng)今社會(huì)發(fā)揮了重要作用,下面這篇文章主要給大家介紹了關(guān)于如何用Python從桌面讀取二維碼信息的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10

最新評(píng)論

河间市| 汝南县| 涡阳县| 宣威市| 五家渠市| 霍城县| 阜新市| 酉阳| 枣强县| 涡阳县| 绥滨县| 陇西县| 平江县| 新绛县| 新宾| 巴青县| 大冶市| 临海市| 吉林省| 绥江县| 明溪县| 永济市| 铜川市| 肇庆市| 阳高县| 尖扎县| 梁平县| 汾阳市| 济源市| 桃园市| 尚志市| 衡东县| 兴仁县| 津南区| 孟州市| 施秉县| 台中市| 杭锦后旗| 寻乌县| 蓬安县| 临沧市|