zoukankan      html  css  js  c++  java
  • 【转】利用Python将多个PDF合并为一个

    • 本脚本用来合并pdf文件,输出的pdf文件按输入的pdf文件名生成书签

    • 使用示例如下:

      python pdfmerge.py -p "D:pdf-files" -o "merged-out.pdf" -b True'
      
      • 1
    • 示例说明:
      要合并的pdf文件所在的路径: D:pdf-files
      合并后的pdf文件的输出文件名:merged-out.pdf
      是否从pdf文件中导入书签的值:True

    • 所用模块:PyPDF2argparse及其他

    • 测试环境:3.7.1

    • 实现代码:

    import os, sys, codecs
    from argparse import ArgumentParser, RawTextHelpFormatter
    from PyPDF2 import PdfFileReader, PdfFileWriter, PdfFileMerger
    
    def getfilenames(filepath='',filelist_out=[],file_ext='all'):
        # 遍历filepath下的所有文件,包括子目录下的文件
        for fpath, dirs, fs in os.walk(filepath):
            for f in fs:
                fi_d = os.path.join(fpath, f)
                if  file_ext == 'all':
                    filelist_out.append(fi_d)
                elif os.path.splitext(fi_d)[1] == file_ext:
                    filelist_out.append(fi_d)
                else:
                    pass
        return filelist_out
    
    def mergefiles(path, output_filename, import_bookmarks=False):
        # 遍历目录下的所有pdf将其合并输出到一个pdf文件中,输出的pdf文件默认带书签,书签名为之前的文件名
        # 默认情况下原始文件的书签不会导入,使用import_bookmarks=True可以将原文件所带的书签也导入到输出的pdf文件中
        merger = PdfFileMerger()
        filelist = getfilenames(filepath=path, file_ext='.pdf')
        if len(filelist) == 0:
            print("当前目录及子目录下不存在pdf文件")
            sys.exit()
        for filename in filelist:
            f = codecs.open(filename, 'rb')
            file_rd = PdfFileReader(f)
            short_filename = os.path.basename(os.path.splitext(filename)[0])
            if file_rd.isEncrypted == True:
                print('不支持的加密文件:%s'%(filename))
                continue
            merger.append(file_rd, bookmark=short_filename, import_bookmarks=import_bookmarks)
            print('合并文件:%s'%(filename))
            f.close()
        out_filename=os.path.join(os.path.abspath(path), output_filename)
        merger.write(out_filename)
        print('合并后的输出文件:%s'%(out_filename))
        merger.close()
    
    if __name__ == "__main__":
        description="
    本脚本用来合并pdf文件,输出的pdf文件按输入的pdf文件名生成书签
    使用示例如下:"
        description=description+'
    python pdfmerge.py -p "D:pdf-files" -o "merged-out.pdf" -b True'
        description=description+'
    
    '+"示例说明:"
        description=description+'
    '+"要合并的pdf文件所在的路径: D:pdf-files"
        description=description+'
    '+"合并后的pdf文件的输出文件名:merged-out.pdf"
        description=description+'
    '+"是否从pdf文件中导入书签的值:True"
    
        # 添加程序帮助,程序帮助支持换行符号
        parser = ArgumentParser(description=description, formatter_class=RawTextHelpFormatter)
    
        # 添加命令行选项
    
        parser.add_argument("-p", "--path",
                            dest="path",
                            default=".",
                            help="PDF文件所在目录")
        parser.add_argument("-o", "--output",
                            dest="output_filename",
                            default="merged.pdf
     
  • 相关阅读:
    lodash源码分析之自减的两种形式
    lodash源码分析之NaN不是NaN
    lodash源码分析之Hash缓存
    lodash源码分析之compact中的遍历
    navigate15安装教程
    jmeter线程组调度器使用
    jmeter 注册选择文件编码格式有问题
    jmete插件下载
    jmeter linux 无gui模式分布式压测
    pycharm原码编辑界面快捷键
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/11334257.html
Copyright © 2011-2022 走看看