PyPDF2 库,顾名思义,就是用来操作PDF文件的,相信网上已经有太多相关的介绍文章了,我这里就不再赘述了。这里只重点一下制作书签的过程,网上好像还没有比较详细实用的文章!
对于合并PDF,已经有很多成熟的代码了,我们拿来直接使用
from PyPDF2 import PdfFileReader, PdfFileWriter
def merge_pdf(infnList, outfn):
pdf_mark_list = []
pdf_output = PdfFileWriter()
for infn in infnList:
pdf_mark = []
pdf_input = PdfFileReader(open(infn, 'rb'))
# 获取 pdf 共用多少页
page_count = pdf_input.getNumPages()
for i in range(page_count):
pdf_output.addPage(pdf_input.getPage(i))
pdf_output.write(open(outfn, 'wb'))
if __name__ == '__main__':
outfn = 'outfn.pdf'
import os
pdf_list = []
for i in os.listdir():
if os.path.splitext(i)[-1] == '.pdf':
pdf_list.append(i)
print(pdf_list)
merge_pdf(pdf_list, outfn)
这样就可以方便的把当前目录下的所有PDF文件都合并到一个新的PDF当中,但是却有一个问题,就是没有书签,这对于一个教程类的文档来说,是及其不友好的,下面就来看看如何添加书签
根据 PyPDF2 的官方文档或网上的文章可以知道,添加书签可以使用下面的代码
# 添加书签
pdfWriter.addBookmark(title, pagenum, parent=parent)
但是也就这么一句话,完全没有真实的使用实例
根据我的尝试可以得出,对于 pagenum 参数,是用来指定书签页数的,要注意,PyPDF2 中PDF的页面是从0开始的,即在序列0添加书签时会跳到首页,在n处添加书签时会跳转至n+1页。
清楚上面的机制之后,就可以编码了,先编写一个添加书签的函数
def add_bookmark(pdfmark, outfile):
print(pdfmark)
pdf_output = PdfFileWriter()
pdf_input = PdfFileReader(open(outfile, 'rb'))
pdf_output.appendPagesFromReader(pdf_input)
for i in pdfmark:
pdf_output.addBookmark(i[0], i[1])
pdf_output.write(open('bookmark.pdf', 'wb'))
该函数接收两个参数,一个列表参数 pdfmark,是一个二维列表,存储着书签的名称和所在页数,另一个参数则是当前需要编辑的已经存在的PDF文件 下面开始改写 merge_pdf 函数,把 add_bookmark 函数所需的 pdfmark 列表组装起来
def merge_pdf(infnList, outfn):
pdf_mark_list = []
pdf_output = PdfFileWriter()
page_count = 1
page_total = 0
for infn in infnList:
pdf_mark = []
pdf_input = PdfFileReader(open(infn, 'rb'))
page_tmp = page_count
page_total += page_tmp
# 获取 pdf 共用多少页
page_count = pdf_input.getNumPages()
print(page_count)
print(page_total)
pdf_mark.append(infn.split('.pdf')[0])
pdf_mark.append(page_total - 1)
pdf_mark_list.append(pdf_mark)
for i in range(page_count):
pdf_output.addPage(pdf_input.getPage(i))
pdf_output.write(open(outfn, 'wb'))
add_bookmark(pdf_mark_list, outfn)
return pdf_mark_list, outfn
这样运行代码,就可以得到一个带有书签的PDF文档啦
一直关注的朋友应该知道,在2020年我断断续续的更新了两个系列教程,分别是数据分析入门和Python Web 入门,Python Web 入门更新的慢一些,还在难产中。。。而数据分析入门已经完成,感兴趣的朋友可以翻看往期的推文查看
如果你觉得来来回回翻看推文太不方便了,没关系,在公众号后台回复“电子书”,就可以免费获取这本入门教程电子书了,满满的诚意哦!
看到这里,还不给个“在看”或点个“赞”嘛!