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

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

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

安裝所需要的庫

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

將多個(gè)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í)際路徑
    '數(shù)招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招考試—數(shù)學(xué)每日一練5(3.18).pdf',  # 替換為B.pdf的實(shí)際路徑
    '物模.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\物理一模每日一練5(3.18).pdf',  # 替換為C.pdf的實(shí)際路徑
    '物招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招考試—物理每日一練5(3.18).pdf',  # 替換為C.pdf的實(shí)際路徑
    '化模.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\化學(xué)一模每日一練5(3.18).pdf',  # 替換為C.pdf的實(shí)際路徑
    '化招.pdf': r'D:\Users\Documents\WeChat Files\FileStorage\File\2025-03\自招版—化學(xué)每日一練5(3.18).pdf'    # 替換為C.pdf的實(shí)際路徑
}

# 定義要提取的頁碼(注意:頁碼從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)建一個(gè)PdfWriter對(duì)象來保存合并后的PDF
output_pdf = PdfWriter()

# 遍歷每個(gè)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'  # 替換為輸出文件的實(shí)際路徑
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:一個(gè)字典,指定每個(gè) 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的實(shí)際路徑
    'b.pdf': '/path/to/b.pdf',  # 替換為b.pdf的實(shí)際路徑
    'c.pdf': '/path/to/c.pdf'   # 替換為c.pdf的實(shí)際路徑
}

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

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

# 遍歷每個(gè)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)建一個(gè)PdfWriter對(duì)象
        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)前頁保存為一個(gè)單獨(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)前頁保存為一個(gè)單獨(dú)的 PDF 文件。

方法擴(kuò)展

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

1.python提取多個(gè)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實(shí)現(xiàn)合并與拆分多個(gè)PDF文檔中的指定頁的文章就介紹到這了,更多相關(guān)Python合并與拆分PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python畫柱狀圖--不同顏色并顯示數(shù)值的方法

    python畫柱狀圖--不同顏色并顯示數(shù)值的方法

    今天小編就為大家分享一篇python畫柱狀圖--不同顏色并顯示數(shù)值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python不區(qū)分大小寫進(jìn)行文本處理終極指南

    Python不區(qū)分大小寫進(jìn)行文本處理終極指南

    Python標(biāo)準(zhǔn)庫提供了多種處理大小寫不敏感操作的工具和技巧,本文將深入解析不區(qū)分大小寫文本處理的技術(shù)體系,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-08-08
  • python 讀取二進(jìn)制 顯示圖片案例

    python 讀取二進(jìn)制 顯示圖片案例

    這篇文章主要介紹了python 讀取二進(jìn)制 顯示圖片案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python jinja2模板的使用示例

    python jinja2模板的使用示例

    這篇文章主要介紹了python jinja2模板的使用示例,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • Python存儲(chǔ)與讀寫二進(jìn)制文件的示例代碼

    Python存儲(chǔ)與讀寫二進(jìn)制文件的示例代碼

    本文介紹了如何在Python中使用Numpy將數(shù)組轉(zhuǎn)存為二進(jìn)制文件,并通過內(nèi)存映射的方式讀取,提供了一個(gè)高效處理大量數(shù)據(jù)的方法,示例代碼展示了完整的存儲(chǔ)和讀取過程,解釋了頁大小和數(shù)據(jù)存儲(chǔ)的關(guān)系,適用于需要高性能計(jì)算和數(shù)據(jù)壓縮的場景,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • python使用arcpy.mapping模塊批量出圖

    python使用arcpy.mapping模塊批量出圖

    出圖是項(xiàng)目里常見的任務(wù),有的項(xiàng)目甚至?xí)习購垐D片,所以批量出土工具很有必要,這篇文章主要介紹了python使用arcpy.mapping模塊批量出圖,有興趣的可以了解一下。
    2017-03-03
  • Python如何設(shè)置Excel單元格邊框

    Python如何設(shè)置Excel單元格邊框

    在數(shù)據(jù)驅(qū)動(dòng)的業(yè)務(wù)場景中,自動(dòng)化設(shè)置Excel單元格邊框成為提升數(shù)據(jù)處理效率的關(guān)鍵環(huán)節(jié),下面我們就來講講如何使用Python設(shè)置Excel工作簿中單元格的邊框吧
    2025-04-04
  • Pandas?DataFrame添加一行數(shù)據(jù)的幾種方法

    Pandas?DataFrame添加一行數(shù)據(jù)的幾種方法

    在處理數(shù)據(jù)分析和數(shù)據(jù)科學(xué)項(xiàng)目時(shí),經(jīng)常會(huì)使用到Python中的pandas庫來進(jìn)行數(shù)據(jù)操作和分析,其中DataFrame是pandas庫中最重要的數(shù)據(jù)結(jié)構(gòu)之一,這篇文章主要給大家介紹了關(guān)于Pandas?DataFrame添加一行數(shù)據(jù)的幾種方法,需要的朋友可以參考下
    2024-08-08
  • Python實(shí)現(xiàn)將HTML表格一鍵導(dǎo)出為Excel

    Python實(shí)現(xiàn)將HTML表格一鍵導(dǎo)出為Excel

    在數(shù)據(jù)處理和網(wǎng)頁爬蟲項(xiàng)目中,我們經(jīng)常會(huì)遇到從 HTML 頁面中提取表格的需求,本文將使用Python,BeautifulSoup和pandas實(shí)現(xiàn)一鍵將 HTML中的多個(gè)表格導(dǎo)出為Excel文件,需要的可以了解下
    2025-11-11
  • 淺析AST抽象語法樹及Python代碼實(shí)現(xiàn)

    淺析AST抽象語法樹及Python代碼實(shí)現(xiàn)

    Abstract Syntax Tree抽象語法樹簡寫為ATS,是相當(dāng)于用樹結(jié)構(gòu)將代碼程式表現(xiàn)出來的一種數(shù)據(jù)結(jié)構(gòu),這里我們就來淺析AST抽象語法樹及Python代碼實(shí)現(xiàn)
    2016-06-06

最新評(píng)論

惠水县| 衡水市| 开封县| 东丽区| 利川市| 浦北县| 凌云县| 象州县| 安化县| 平江县| 栖霞市| 高青县| 甘南县| 山阴县| 乐东| 神木县| 德令哈市| 长治市| 曲阳县| 花莲市| 南溪县| 武平县| 武清区| 彭州市| 湘阴县| 吕梁市| 大竹县| 凌云县| 开鲁县| 常宁市| 木兰县| 富平县| 荥阳市| 台中市| 岳西县| 靖宇县| 蓬安县| 宁阳县| 阜康市| 海林市| 湘潭市|