使⽤python合并pdf⽂件带书签
1、需求:
将⼏本纸质书进⾏了扫描,可是扫描的每页⽣成⼀个pdf⽂件。需要怎么才能把这些pdf⽂件合成⼀个呢?adoba acrobat⼯具⽀持,可是收费。我们平时⽤的都是adoba reader,只有读pdf的功能没有合并等⾼级功能。⽹上的⼀些免费⼯具⼜担⼼有病毒或绑定程序。
所以考虑看看pyton实现。⽹上了下python合并pdf的脚本,发现也没有添加书签的功能的,有添加书签的也不是很灵活。
所有对⽹上的⼀个python程序进⾏了升级,可以实现合并pdf并每个章节加⼊书签。
⽂件准备:
先将扫描的pdf⽂件,每⼀章放到⼀个⽂件夹中,⽂件夹名字⽤章节名命名。这样最终程序就能将章节名作为书签了,⽽不是默认将每页都⽣成书签。
2、程序代码
代码运⾏环境:python3
需要安装PyPDF2包:pip install PyPDF2
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
本脚本⽤来合并pdf⽂件,⽀持带⼀级⼦⽬录的
每章内容分别放在不同的⽬录下,⽬录名为章节名
最终⽣成的pdf,按章节名⽣成书签
'''python怎么读文件夹下的文件夹
import os, sys, codecs
from PyPDF2 import PdfFileReader, PdfFileWriter, PdfFileMerger
import glob
def getFileName(filepath):
'''
获取当前⽬录下的所有pdf⽂件
获取当前⽬录下的所有pdf⽂件
'''
file_list = glob.glob(filepath+"/*.pdf")
# 默认安装字典序排序,也可以安装⾃定义的⽅式排序
# file_list.sort()
return file_list
def get_dirs(filepath='', dirlist_out=[], dirpathlist_out=[]):
# 遍历filepath下的所有⽬录
for dir in os.listdir(filepath):
dirpathlist_out.append(filepath + '\\' + dir)
return dirpathlist_out
def merge_childdir_files(path):
'''
每个⼦⽬录下合并⽣成⼀个pdf
'''
dirpathlist = get_dirs(path)
if len(dirpathlist) == 0:
print("当前⽬录不存在⼦⽬录")
for dir in dirpathlist:
mergefiles(dir, dir)
def mergefiles(path, output_filename, import_bookmarks=False):
# 遍历⽬录下的所有pdf将其合并输出到⼀个pdf⽂件中,输出的pdf⽂件默认带书签,书签名为之前的⽂件名
# 默认情况下原始⽂件的书签不会导⼊,使⽤import_bookmarks=True可以将原⽂件所带的书签也导⼊到输出的pdf⽂件中merger = PdfFileMerger()
filelist = getFileName(path)
if len(filelist) == 0:
print("当前⽬录及⼦⽬录下不存在pdf⽂件")
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(output_filename + ".pdf")
print('合并后的输出⽂件:%s'%(output_filename))
merger.close()
if __name__ == "__main__":
# 每个章节⼀个⼦⽬录,先分别合并每个⼦⽬录⽂件为⼀个pdf,然后再将这些pdf合并为⼀个⼤的pdf,这样做⽬的是想⽣成每个章节的书签
# 1.指定⽬录
# 原始pdf所在⽬录
path = "D:\spdf"
# 输出pdf路径和⽂件名
output_filename = "D:\spdf\战略规划 公司实现持续成功的⽅法、⼯具和实践  罗熙昶 2018-09"
# 2.⽣成⼦⽬录的pdf
# merge_childdir_files(path)
# 3.⼦⽬录pdf合并为总的pdf
mergefiles(path, output_filename)
3、程序使⽤
将要⽣成的pdf⽂件⽬录导⼊到程序指定⽬录下,例如我程序中的path是“D:\spdf”,然后指定最终输出的⽂件路径及⽂件名,我上⾯的output_filename是"D:\spdf\战略规划 公司实现持续成功的⽅法、⼯具和实践  罗熙昶 2018-09"
数据结果如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。