1. 程式人生 > >使用Python批量合並PDF文件(帶書簽功能)

使用Python批量合並PDF文件(帶書簽功能)

pri turn os.walk gpa spl pan 情況下 split join

網上找了幾個合並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文件(帶書簽功能)