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

这是一个Python脚本,用于合并PDF文件,并根据输入文件名生成书签。用户可以指定PDF文件路径、输出文件名以及是否导入原PDF的书签。
摘要由CSDN通过智能技术生成

1 #!/usr/bin/env python3

2 #-*- coding: utf-8 -*-

3 '''

4 #文件名:pdfmerge.py5 本脚本用来合并pdf文件,输出的pdf文件按输入的pdf文件名生成书签6 使用示例如下:7 python pdfmerge.py -p "D:\pdf-files" -o "merged-out.pdf" -b True'8

9 示例说明:10 要合并的pdf文件所在的路径: D:\pdf-files11 合并后的pdf文件的输出文件名:merged-out.pdf12 是否从pdf文件中导入书签的值:True13 '''

14 importos, sys, codecs15 from argparse importArgumentParser, RawTextHelpFormatter16 from PyPDF2 importPdfFileReader, PdfFileWriter, PdfFileMerger17

18 def getfilenames(filepath='',filelist_out=[],file_ext='all'):19 #遍历filepath下的所有文件,包括子目录下的文件

20 for fpath, dirs, fs inos.walk(filepath):21 for f infs: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 returnfilelist_out30

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 if len(filelist) ==0:37 print("当前目录及子目录下不存在pdf文件")38 sys.exit()39 for filename infilelist:40 f = codecs.open(filename, 'rb')41 file_rd =PdfFileReader(f)42 short_filename =os.path.basename(os.path.splitext(filename)[0])43 if file_rd.isEncrypted ==True:44 print('不支持的加密文件:%s'%(filename))45 continue

46 merger.append(file_rd, bookmark=short_filename, import_bookmarks=import_bookmarks)47 print('合并文件:%s'%(filename))48 f.close()49 out_filename=os.path.join(os.path.abspath(path), output_filename)50 merger.write(out_filename)51 print('合并后的输出文件:%s'%(out_filename))52 merger.close()53

54 if __name__ == "__main__":55 description="\n本脚本用来合并pdf文件,输出的pdf文件按输入的pdf文件名生成书签\n使用示例如下:"

56 description=description+'\npython pdfmerge.py -p "D:\pdf-files" -o "merged-out.pdf" -b True'

57 description=description+'\n\n'+"示例说明:"

58 description=description+'\n'+"要合并的pdf文件所在的路径: D:\pdf-files"

59 description=description+'\n'+"合并后的pdf文件的输出文件名:merged-out.pdf"

60 description=description+'\n'+"是否从pdf文件中导入书签的值:True"

61

62 #添加程序帮助,程序帮助支持换行符号

63 parser = ArgumentParser(description=description, formatter_class=RawTextHelpFormatter)64

65 #添加命令行选项

66

67 parser.add_argument("-p", "--path",68 dest="path",69 default=".",70 help="PDF文件所在目录")71 parser.add_argument("-o", "--output",72 dest="output_filename",73 default="merged.pdf",74 help="合并PDF的输出文件名",75 metavar="FILE")76 parser.add_argument("-b", "--bookmark",77 dest="import_bookmarks",78 default="False",79 help="是否从pdf文件中导入书签,值可以是'True'或者'False'")80

81 args =parser.parse_args()82 #try:

83 mergefiles(args.path, args.output_filename, args.import_bookmarks)84 #except:

85 #print('Error to merge pdf file:')

86 #print(sys.exc_info()[0],sys.exc_info()[1])

87

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值