欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)合并與拆分多個PDF文檔中的指定頁

 更新時間:2025年03月19日 15:45:06   作者:VipSoft  
這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)將多個PDF文檔中的指定頁合并生成新的PDF以及拆分PDF,感興趣的小伙伴可以參考一下

安裝所需要的庫

pip install PyPDF2 -i https://pypi.tuna.tsinghua.edu.cn/simple

將多個PDF文檔中的指定頁,合并生成新的PDF

代碼如下:

from PyPDF2 import PdfReader, PdfWriter
# pip install PyPDF2 -i https://pypi.tuna.tsinghua.edu.cn/simple

# 定義要處理的PDF文件及其完整路徑
pdf_files = {
    '數(shù)模.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\數(shù)學(xué)一模每日一練5(3.18).pdf',  # 替換為A.pdf的實際路徑
    '數(shù)招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招考試—數(shù)學(xué)每日一練5(3.18).pdf',  # 替換為B.pdf的實際路徑
    '物模.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\物理一模每日一練5(3.18).pdf',  # 替換為C.pdf的實際路徑
    '物招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招考試—物理每日一練5(3.18).pdf',  # 替換為C.pdf的實際路徑
    '化模.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\化學(xué)一模每日一練5(3.18).pdf',  # 替換為C.pdf的實際路徑
    '化招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招版—化學(xué)每日一練5(3.18).pdf'    # 替換為C.pdf的實際路徑
}

# 定義要提取的頁碼(注意:頁碼從0開始)
pages_to_extract = {
    '數(shù)模.pdf': [0],  # 提取A.pdf的第1頁和第3頁
    '數(shù)招.pdf': [0],  # 提取B.pdf的第2頁
    '物模.pdf': [0],  # 提取C.pdf的第1頁和第2頁
    '物招.pdf': [0],  # 提取A.pdf的第1頁和第3頁
    '化模.pdf': [0],  # 提取B.pdf的第2頁
    '化招.pdf': [0]  # 提取C.pdf的第1頁和第2頁
}

# 創(chuàng)建一個PdfWriter對象來保存合并后的PDF
output_pdf = PdfWriter()

# 遍歷每個PDF文件
for pdf_name, pdf_path in pdf_files.items():
    # 讀取PDF文件
    reader = PdfReader(pdf_path)

    # 獲取要提取的頁碼
    pages = pages_to_extract.get(pdf_name, [])

    # 遍歷要提取的頁碼
    for page_num in pages:
        # 獲取指定頁
        page = reader.pages[page_num]
        # 將頁添加到輸出PDF中
        output_pdf.add_page(page)

# 將合并后的PDF寫入到輸出文件
output_path = r'D:\Users\Desktop\0319.pdf'  # 替換為輸出文件的實際路徑
with open(output_path, 'wb') as output_file:
    output_pdf.write(output_file)

print(f"PDF合并完成,已保存為 {output_path}")

代碼說明:

  • PdfReader:用于讀取 PDF 文件。
  • PdfWriter:用于創(chuàng)建和寫入新的 PDF 文件。
  • pages_to_extract:一個字典,指定每個 PDF 文件中要提取的頁碼。注意,頁碼從 0 開始。
  • output_pdf.add_page(page):將指定的頁面添加到輸出 PDF 中。
  • output_pdf.write(output_file):將合并后的 PDF 寫入到輸出文件。

拆分PDF

代碼如下:

from PyPDF2 import PdfReader, PdfWriter
import os

# 定義要處理的PDF文件及其完整路徑
pdf_files = {
    'a.pdf': '/path/to/a.pdf',  # 替換為a.pdf的實際路徑
    'b.pdf': '/path/to/b.pdf',  # 替換為b.pdf的實際路徑
    'c.pdf': '/path/to/c.pdf'   # 替換為c.pdf的實際路徑
}

# 定義輸出目錄
output_dir = '/path/to/output'  # 替換為輸出目錄的實際路徑

# 如果輸出目錄不存在,則創(chuàng)建它
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# 遍歷每個PDF文件
for pdf_name, pdf_path in pdf_files.items():
    # 讀取PDF文件
    reader = PdfReader(pdf_path)
    
    # 遍歷PDF的每一頁
    for page_num, page in enumerate(reader.pages):
        # 創(chuàng)建一個PdfWriter對象
        writer = PdfWriter()
        # 將當(dāng)前頁添加到PdfWriter中
        writer.add_page(page)
        
        # 生成輸出文件名
        output_filename = os.path.join(output_dir, f'{pdf_name}_page_{page_num + 1}.pdf')
        
        # 將當(dāng)前頁保存為一個單獨(dú)的PDF文件
        with open(output_filename, 'wb') as output_file:
            writer.write(output_file)
        
        print(f"已保存: {output_filename}")

print("所有頁面已拆分為單獨(dú)的PDF文件!")

代碼說明:

  • PdfReader
    • 用于讀取 PDF 文件。
  • PdfWriter
    • 用于創(chuàng)建新的 PDF 文件。
  • os.makedirs(output_dir)
    • 如果輸出目錄不存在,則創(chuàng)建它。
  • enumerate(reader.pages)
    • 遍歷 PDF 的每一頁,page_num 是頁碼(從 0 開始),page 是當(dāng)前頁內(nèi)容。
  • output_filename
    • 生成輸出文件的路徑和名稱,格式為 {pdf_name}_page_{page_num + 1}.pdf(例如 a.pdf_page_1.pdf)。
  • writer.write(output_file)
    • 將當(dāng)前頁保存為一個單獨(dú)的 PDF 文件。

方法擴(kuò)展

下面小編為大家整理了一些Python關(guān)于PDF文檔的其他應(yīng)用,希望對大家有所幫助

1.python提取多個pdf特定頁,并合并為新pdf文件

方法如下

import os
from PyPDF2 import PdfReader, PdfWriter

class PdfMerge:
    def __init__(self, fileList, dstFile):
        self.fileList = fileList
        self.dstFile = dstFile
       
    def readPdf(self, pdfFile, pageRange):
        pageList = []
        pdf_reader = PdfReader(pdfFile)
        for i in range(len(pdf_reader.pages)):
            if i in pageRange:
                pageList.append(pdf_reader.pages[i])
        return pageList
    
    def writePdf(self, pageList): 
        pdf_writer = PdfWriter()
        for page in pageList:
            pdf_writer.add_page(page)
        with open(self.dstFile, 'wb') as out:
            pdf_writer.write(out)
    
    def getRangeList(self, rangeStr):
        rangeList = []
        if rangeStr.find(':') >= 0:
            r = rangeStr.split(':')
            if len(r) != 2:
                print("rangeStr[%s] split [:] failed!"%(rangeStr))
                return rangeList
            mi = int(r[0])
            ma = int(r[1])
            for i in range(mi, ma):
                rangeList.append(i)
        elif rangeStr.find(',') >= 0:
            r = rangeStr.split(',')
            mi = int(r[0])
            ma = int(r[1])
            for i in r:
                rangeList.append(int(i))
        elif rangeStr.isnumeric():
            rangeList.append(int(rangeStr))
        else:
            print("rangeStr split failed! not find [:] and [,]")
        return rangeList
 
    def mergePdf(self):
        pageList = []
        for pdf in self.fileList:
            file = pdf["file"]
            fileRange = self.getRangeList(pdf["range"])
            print("file[{}] rangeStr[{}] rangeList{}".format(file, pdf["range"], fileRange))
            pageList.extend(self.readPdf(file, fileRange))
        self.writePdf(pageList)

def main():
    fileList = [{"file":"source/1_任務(wù)書.pdf", "range":"0:10"},{"file":"source/20230409074902162.pdf", "range":"0"}]
   # fileList = [{"file":"source/1_任務(wù)書.pdf", "range":"0,1,5,6,7"},{"file":"source/20230409074902162.pdf", "range":"0"}]
    fileProcess = PdfMerge(fileList, "source/任務(wù)書.pdf")
    fileProcess.mergePdf()

if __name__ == "__main__":
    main()

2.批量截取PDF指定頁面

說明:此腳本用于批量截取pdf指定頁面。

import os
from PyPDF2 import PdfFileWriter, PdfFileReader


def get_file(path, all_files):
    FileNames = os.listdir(path)
    for file_name in FileNames:
        cur_path = os.path.join(path, file_name)
        if os.path.isdir(cur_path):
            get_file(cur_path, all_files)
        else:
            if file_name.endswith('.pdf'):
                all_files.append(cur_path)
    return all_files


def extract_one_pdf(pdf_path, save_dir, start_page, end_page):
    pdf_name = pdf_path.split("\\")[-1]
    print(f"Processing file -- {pdf_path}")
    if not os.path.exists(save_dir):
        print(save_dir)
        os.makedirs(save_dir)
    pdf_file = PdfFileReader(pdf_path, strict=False)
    pdf_pages = pdf_file.getNumPages()
    if not -1 < start_page < end_page < pdf_pages:
        raise ValueError("Pages Error")

    pdf_output = PdfFileWriter()
    for i in range(start_page, end_page):
        page = pdf_file.getPage(i)
        pdf_output.addPage(page)
    with open(save_dir + pdf_name, 'wb') as out:
        pdf_output.write(out)


def extract_many_pdf(pdf_dir_path, save_path, start_page, end_page):

    source_files = get_file(pdf_dir_path, [])
    for i, file in enumerate(source_files):
        file_name = file.split("\\")[-1]
        save_file = file.replace(pdf_dir_path, save_path)
        save_dir = save_file.replace(file_name, '')
        extract_one_pdf(file, save_dir, start_page, end_page)


if __name__ == '__main__':
    path = "C:\\Users\\Lenovo\\Desktop\\test\\"
    out_path = "C:\\Users\\Lenovo\\Desktop\\pdf_out\\"
    extract_many_pdf(path, out_path, 0, 1)

到此這篇關(guān)于Python實現(xiàn)合并與拆分多個PDF文檔中的指定頁的文章就介紹到這了,更多相關(guān)Python合并與拆分PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 手把手教你用Python打造互動式中秋節(jié)慶祝小程序

    手把手教你用Python打造互動式中秋節(jié)慶祝小程序

    中秋節(jié)將至,本文提供了一個使用Python開發(fā)的中秋節(jié)慶祝小程序教程,通過簡單的步驟,您可以創(chuàng)建一個具有節(jié)日祝福、互動式燈謎游戲和模擬中秋明月動態(tài)背景的小程序,文章詳細(xì)介紹了程序的功能、實現(xiàn)步驟以及如何運(yùn)行程序,需要的朋友可以參考下
    2024-09-09
  • django 通過URL訪問上傳的文件方法

    django 通過URL訪問上傳的文件方法

    今天小編就為大家分享一篇django 通過URL訪問上傳的文件方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • NumPy數(shù)組復(fù)制與視圖詳解

    NumPy數(shù)組復(fù)制與視圖詳解

    NumPy 數(shù)組的復(fù)制和視圖是兩種不同的方式來創(chuàng)建新數(shù)組,它們之間存在著重要的區(qū)別,本文將給大家詳細(xì)介紹一下NumPy數(shù)組復(fù)制與視圖,并通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Python中IPYTHON入門實例

    Python中IPYTHON入門實例

    這篇文章主要介紹了Python中IPYTHON的用法入門,較為詳細(xì)的分析了IPYTHON的配置及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-05-05
  • 如何在vscode中安裝python庫的方法步驟

    如何在vscode中安裝python庫的方法步驟

    這篇文章主要介紹了如何在vscode中安裝python庫的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python實現(xiàn)自動更換ip的方法

    python實現(xiàn)自動更換ip的方法

    這篇文章主要介紹了python實現(xiàn)自動更換ip的方法,涉及Python針對本機(jī)網(wǎng)絡(luò)配置的相關(guān)操作技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • python關(guān)閉占用端口方式

    python關(guān)閉占用端口方式

    今天小編就為大家分享一篇python關(guān)閉占用端口方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 使用python?itertools實現(xiàn)計算雙十一滿減湊單

    使用python?itertools實現(xiàn)計算雙十一滿減湊單

    一年一度的雙十一又到了,在這樣一個日子中,可能遇到一些問題,首先是“湊單”問題,本文將使用python中的itertools庫解決這一問題,感興趣的可以了解下
    2024-11-11
  • Python中函數(shù)的參數(shù)定義和可變參數(shù)用法實例分析

    Python中函數(shù)的參數(shù)定義和可變參數(shù)用法實例分析

    這篇文章主要介紹了Python中函數(shù)的參數(shù)定義和可變參數(shù)用法,以實例形式較為詳細(xì)的分析了Python中參數(shù)定義與可變參數(shù)的具體使用方法,需要的朋友可以參考下
    2015-06-06
  • python datetime中strptime用法詳解

    python datetime中strptime用法詳解

    這篇文章主要介紹了python 中datetime中strptime用法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08

最新評論