批量合並 PDF|Python 辦公自動化(附上完整源碼)!


大家好,今天分享一個實用的辦公腳本:將多個PDF合並為一個PDF,例如我手上現在有如下3個PDF分冊,需要整合成一個完整的PDF

 

圖片

 

如果換成你操作的話,是不是打開百度搜索:PDF合並,然后去第三方網站操作,可能會收費不說還擔心文件泄漏,現在有請Python出場,簡單快速,光速合並,拿走就用

首先導入需要的庫和路徑設置

 

import os
from PyPDF2 import PdfFileReader, PdfFileWriter
if __name__ == '__main__':
    # 設置存放多個pdf文件的文件夾
    dir_path = r'C:\Scientific Research\Knowladge\Ophthalmology\Chinese Ophthalmology' 
    # 目標文件的名字
    file_name = "中華眼科學(第3版)合並版.pdf" 

 

接着獲取所有pdf文件的絕對路徑,這里需要利用os庫中的os.walk遍歷文件和os.path.join拼接路徑

for dirpath, dirs, files in os.walk(dir_path):
    print(dirpath)
    print(files)
# 結果返回當前路徑、當前路徑下文件夾,並以列表返回所有文件

 

圖片

建議直接將需要合並的pdf放在一個文件夾,這樣就無需再對文件后綴進行判斷,包裝成函數后如下:

def GetFileName(dir_path):
    file_list = [os.path.join(dirpath, filesname) \
                 for dirpath, dirs, files in os.walk(dir_path) \
                 for filesname in files]
    return file_list

 

調用該函數的結果

圖片

 

現在建立合並PDF的函數

 

def MergePDF(dir_path, file_name):
    # 實例化寫入對象
    output = PdfFileWriter()
    outputPages = 0
    # 調用上一個函數獲取全部文件的絕對路徑
    file_list = GetFileName(dir_path)

    for pdf_file in file_list:
        print("文件:%s" % pdf_file.split('\\')[-1], end=' ')

        # 讀取PDF文件
        input = PdfFileReader(open(pdf_file, "rb"))
        # 獲得源PDF文件中頁面總數
        pageCount = input.getNumPages()
        outputPages += pageCount
        print("頁數:%d" % pageCount)
        # 分別將page添加到輸出output中
        for iPage in range(pageCount):
            output.addPage(input.getPage(iPage))
    print("\n合並后的總頁數:%d" % outputPages)
    # 寫入到目標PDF文件
    print("PDF文件正在合並,請稍等......")
    with open(os.path.join(dir_path, file_name), "wb") as outputfile:
        # 注意這里的寫法和正常的上下文文件寫入是相反的
        output.write(outputfile)
    print("PDF文件合並完成")

圖片

 

可以看到雖然待合並的PDF文件比較大,但是依舊快速的合並成功!

最后附上完整代碼,只需將代碼中PDF的路徑和文件名修改即可使用!

 

import os
from PyPDF2 import PdfFileReader, PdfFileWriter

def GetFileName(dir_path):
    file_list = [os.path.join(dirpath, filesname) \
                 for dirpath, dirs, files in os.walk(dir_path) \
                 for filesname in files]
    return file_list

def MergePDF(dir_path, file_name):
    output = PdfFileWriter()
    outputPages = 0
    file_list = GetFileName(dir_path)
    for pdf_file in file_list:
        print("文件:%s" % pdf_file.split('\\')[-1], end=' ')
        # 讀取PDF文件
        input = PdfFileReader(open(pdf_file, "rb"))
        # 獲得源PDF文件中頁面總數
        pageCount = input.getNumPages()
        outputPages += pageCount
        print("頁數:%d" % pageCount)
        # 分別將page添加到輸出output中
        for iPage in range(pageCount):
            output.addPage(input.getPage(iPage))
    print("\n合並后的總頁數:%d" % outputPages)
    # 寫入到目標PDF文件
    print("PDF文件正在合並,請稍等......")
    with open(os.path.join(dir_path, file_name), "wb") as outputfile:
        # 注意這里的寫法和正常的上下文文件寫入是相反的
        output.write(outputfile)
    print("PDF文件合並完成")

if __name__ == '__main__':
    # 設置存放多個pdf文件的文件夾
    dir_path = r'C:\Scientific Research\Knowladge\Ophthalmology\Chinese Ophthalmology'
    # 目標文件的名字
    file_name = "中華眼科學(第3版)合並版.pdf"
    MergePDF(dir_path, file_name)

 在這里還是要推薦下我自己建的Python學習群:609616831,群里都是學Python的,如果你想學或者正在學習Python ,歡迎你加入,大家都是軟件開發黨,不定期分享干貨(只有Python軟件開發相關的),包括我自己整理的一份2020最新的Python進階資料和零基礎教學,歡迎進階中和對Python感興趣的小伙伴加入!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM