使用Python批量合并PDF文件(带书签功能)

Posted 逍客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python批量合并PDF文件(带书签功能)相关的知识,希望对你有一定的参考价值。

网上找了几个合并pdf的软件,发现不是很好用,一般都没有添加书签的功能。

在网上查找了python合并pdf的脚本,发现也没有添加书签的功能。于是自己动手编写了一个小工具,代码如下:

 1 #!/usr/bin/env python3
 2 # -*- coding: utf-8 -*-
 3 ‘‘‘
 4    #文件名:pdfmerge.py
 5    本脚本用来合并pdf文件,输出的pdf文件按输入的pdf文件名生成书签
 6    使用示例如下:
 7    python pdfmerge.py -p "D:\pdf-files" -o "merged-out.pdf" -b True‘
 8    
 9    示例说明:
10    要合并的pdf文件所在的路径: D:\pdf-files
11    合并后的pdf文件的输出文件名:merged-out.pdf
12    是否从pdf文件中导入书签的值:True
13 ‘‘‘
14 import os
15 from argparse import ArgumentParser, RawTextHelpFormatter
16 from PyPDF2 import PdfFileReader, PdfFileWriter, PdfFileMerger
17 
18 def getfilenames(filepath=‘‘,filelist_out=[],file_ext=all):
19     # 遍历filepath下的所有文件,包括子目录下的文件
20     for fpath, dirs, fs in os.walk(filepath):
21         for f in fs:
22             fi_d = os.path.join(fpath, f)
23             if  file_ext == all:
24                 filelist_out.append(fi_d)
25             elif os.path.splitext(fi_d)[1] == file_ext:
26                 filelist_out.append(fi_d)
27             else:
28                 pass
29     return filelist_out
30 
31 def mergefiles(path, output_filename, import_bookmarks=False):
32     # 遍历目录下的所有pdf将其合并输出到一个pdf文件中,输出的pdf文件默认带书签,书签名为之前的文件名
33     # 默认情况下原始文件的书签不会导入,使用import_bookmarks=True可以将原文件所带的书签也导入到输出的pdf文件中
34     merger = PdfFileMerger()
35     filelist = getfilenames(filepath=path, file_ext=.pdf)
36 
37     for filename in filelist:
38         f=open(filename, rb)
39         file_rd=PdfFileReader(f)
40         short_filename=os.path.basename(os.path.splitext(filename)[0])
41         merger.append(file_rd, bookmark=short_filename, import_bookmarks=import_bookmarks)
42         print(合并文件:%s%(filename))
43         f.close()
44     out_filename=os.path.join(os.path.abspath(path), output_filename)
45     merger.write(out_filename)
46     print(合并后的输出文件:%s%(out_filename))
47     merger.close()
48 
49 if __name__ == "__main__":
50     description="\n本脚本用来合并pdf文件,输出的pdf文件按输入的pdf文件名生成书签\n使用示例如下:"
51     description=description+\npython pdfmerge.py -p "D:\pdf-files" -o "merged-out.pdf" -b True
52     description=description+\n\n+"示例说明:"
53     description=description+\n+"要合并的pdf文件所在的路径: D:\pdf-files"
54     description=description+\n+"合并后的pdf文件的输出文件名:merged-out.pdf"
55     description=description+\n+"是否从pdf文件中导入书签的值:True"
56    
57     # 添加程序帮助,程序帮助支持换行符号
58     parser = ArgumentParser(description=description, formatter_class=RawTextHelpFormatter)
59 
60     # 添加命令行选项
61 
62     parser.add_argument("-p", "--path",
63                         dest="path",
64                         default=".",
65                         help="PDF文件所在目录")
66     parser.add_argument("-o", "--output",
67                         dest="output_filename",
68                         default="merged.pdf",
69                         help="合并PDF的输出文件名",
70                         metavar="FILE")
71     parser.add_argument("-b", "--bookmark",
72                     dest="import_bookmarks",
73                     default="False",
74                     help="是否从pdf文件中导入书签,值可以是‘True‘或者‘False‘")
75 
76     args = parser.parse_args()
77     mergefiles(args.path, args.output_filename, args.import_bookmarks)

 

以上是关于使用Python批量合并PDF文件(带书签功能)的主要内容,如果未能解决你的问题,请参考以下文章

应用 —— Python 处理PDF文件 给PDF文件添加书签合并PDF文件转化PPT文件为PDF文件

应用 —— Python 处理PDF文件 给PDF文件添加书签合并PDF文件转化PPT文件为PDF文件

Office三件套批量转PDF以及PDF书签读写与加水印

PDF文件的书签批量自动导入和导出 PDFBookmark-Exchanger

PDF文件的书签批量自动导入和导出 PDFBookmark-Exchanger

python合并pdf并添加书签