python将多个pdf合成一个

发布时间:2019-05-30 21:02:06编辑:auto阅读(1913)

    '''# -*- coding:utf-8*-'''
    import sys
    import importlib
    importlib.reload(sys)
    
    import os
    import os.path
    from PyPDF2 import PdfFileReader, PdfFileWriter  
    import time
    time1=time.time()
    
    # 使用os模块walk函数,搜索出某目录下的全部pdf文件
    ######################获取同一个文件夹下的所有PDF文件名#######################
    def getFileName(filepath):
        file_list = []
        for root,dirs,files in os.walk(filepath):
            for filespath in files:
                # print(os.path.join(root,filespath))
                file_list.append(os.path.join(root,filespath))
    
        return file_list
    
    
    
    ##########################合并同一个文件夹下所有PDF文件########################
    def MergePDF(filepath,outfile):
        output=PdfFileWriter()
        outputPages=0
        in_file_path =filepath +r'input/'
        print(in_file_path)
        pdf_fileName=getFileName(in_file_path)
        i=0
        for each in pdf_fileName:
            i=i+1
            print(i,each)
            # 读取源pdf文件
            input = PdfFileReader(open(each, "rb"))
    
            # 如果pdf文件已经加密,必须首先解密才能使用pyPdf
            if input.isEncrypted == True:
                input.decrypt("map")
    
            # 获得源pdf文件中页面总数
            pageCount = input.getNumPages()
            outputPages += pageCount
            print("PageCount: ",pageCount)
    
            # 分别将page添加到输出output中
            for iPage in range(0, pageCount):
                output.addPage(input.getPage(iPage))
    
    
        print("All Pages Number:"+str(outputPages))
        # 最后写pdf文件
        out_file_path=filepath+r'output/'
        outputStream=open(out_file_path+outfile,"wb")
        output.write(outputStream)
        outputStream.close()
        print( "finished")
    
    
    if __name__ == '__main__':
        file_dir = r'D:/扫描文件/'     # 待合并PDF 所在文件夹
        out=u"某某资料合并文件.pdf"        # 合并后文件名称
        MergePDF(file_dir,out)
        time2 = time.time()
        print( u'总共耗时:' + str(time2 - time1) + 's')
    

      

    使用注意事项
    1、程序第63行,默认指定了一个目录,“D:\扫描文件“,然后在其下建“\input”和“\output”两个子文件夹。
    2、将待合并的pdf文件放在“\input”中,合并后的文件默认为“某某资料合并文件.pdf”,可在程序第64行修改你期望的文件名,合并后文件输出到“\output”。
    3、合并多个文件时,合并顺序为文件名升序。
    补充说明,如何使用python,建议学一本免费的电子书《编程小白的第一本Python入门书》,网上可搜。

    最后,如果哪位朋友有兴趣,可以将程序第63和64行,加一个图形界面,用户在window下选择input 和output,选择输出文件名,然后做一个可执行文件。

关键字