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

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

 更新時間:2025年03月19日 15:45:06   作者:VipSoft  
這篇文章主要為大家詳細介紹了如何使用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ù)學一模每日一練5(3.18).pdf',  # 替換為A.pdf的實際路徑
    '數(shù)招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招考試—數(shù)學每日一練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\化學一模每日一練5(3.18).pdf',  # 替換為C.pdf的實際路徑
    '化招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招版—化學每日一練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()
        # 將當前頁添加到PdfWriter中
        writer.add_page(page)
        
        # 生成輸出文件名
        output_filename = os.path.join(output_dir, f'{pdf_name}_page_{page_num + 1}.pdf')
        
        # 將當前頁保存為一個單獨的PDF文件
        with open(output_filename, 'wb') as output_file:
            writer.write(output_file)
        
        print(f"已保存: {output_filename}")

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

代碼說明:

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

方法擴展

下面小編為大家整理了一些Python關于PDF文檔的其他應用,希望對大家有所幫助

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_任務書.pdf", "range":"0:10"},{"file":"source/20230409074902162.pdf", "range":"0"}]
   # fileList = [{"file":"source/1_任務書.pdf", "range":"0,1,5,6,7"},{"file":"source/20230409074902162.pdf", "range":"0"}]
    fileProcess = PdfMerge(fileList, "source/任務書.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)

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

相關文章

  • python venv和virtualenv模塊詳解

    python venv和virtualenv模塊詳解

    venv 是 Python 內(nèi)置標準庫中創(chuàng)建輕量級虛擬環(huán)境的工具,本文通過示例代碼介紹python venv和virtualenv的相關知識,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • pyqt6實現(xiàn)關閉窗口前彈出確認框的示例代碼

    pyqt6實現(xiàn)關閉窗口前彈出確認框的示例代碼

    本文主要介紹了pyqt6實現(xiàn)關閉窗口前彈出確認框的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • Python實現(xiàn)矩陣可視化的示例代碼

    Python實現(xiàn)矩陣可視化的示例代碼

    matplotlib中提供了兩個矩陣可視化函數(shù),分別是imshow和matshow,本文主要為大家詳細介紹了如何使用這兩個函數(shù),感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10
  • Python使用Transformers實現(xiàn)機器翻譯功能

    Python使用Transformers實現(xiàn)機器翻譯功能

    近年來,機器翻譯技術飛速發(fā)展,從傳統(tǒng)的基于規(guī)則的翻譯到統(tǒng)計機器翻譯,再到如今流行的神經(jīng)網(wǎng)絡翻譯模型,尤其是基于Transformer架構的模型,翻譯效果已經(jīng)有了質的飛躍,本文將詳細介紹如何使用Transformers庫來實現(xiàn)一個機器翻譯模型,需要的朋友可以參考下
    2024-11-11
  • tensorflow pb to tflite 精度下降詳解

    tensorflow pb to tflite 精度下降詳解

    這篇文章主要介紹了tensorflow pb to tflite 精度下降詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python + selenium自動化環(huán)境搭建的完整步驟

    Python + selenium自動化環(huán)境搭建的完整步驟

    這篇文章主要給大家介紹了關于Python + selenium自動化環(huán)境搭建的相關資料,文中通過圖文將實現(xiàn)的步驟一步步介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧
    2018-05-05
  • Python的Lambda函數(shù)用法詳解

    Python的Lambda函數(shù)用法詳解

    在Python中有兩種函數(shù),一種是def定義的函數(shù),另一種是lambda函數(shù),也就是大家常說的匿名函數(shù)。這篇文章主要介紹了Python的Lambda函數(shù)用法,需要的朋友可以參考下
    2019-09-09
  • 用Python遍歷C盤dll文件的方法

    用Python遍歷C盤dll文件的方法

    這篇文章主要介紹了用Python遍歷C盤dll文件的方法,用fnmatch模塊實現(xiàn)起來非常簡單,需要的朋友可以參考下
    2015-05-05
  • jupyter實現(xiàn)重新加載模塊

    jupyter實現(xiàn)重新加載模塊

    這篇文章主要介紹了jupyter實現(xiàn)重新加載模塊,具有很好的價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python MNIST手寫識別數(shù)據(jù)調用API的方法

    python MNIST手寫識別數(shù)據(jù)調用API的方法

    這篇文章主要介紹了python MNIST手寫識別數(shù)據(jù)調用API的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論