借助 PyPDF2 库把数据分析系列教程文章制作成了PDF电子书,欢迎来领取!

简介: 借助 PyPDF2 库把数据分析系列教程文章制作成了PDF电子书,欢迎来领取!

PyPDF2 库,顾名思义,就是用来操作PDF文件的,相信网上已经有太多相关的介绍文章了,我这里就不再赘述了。这里只重点一下制作书签的过程,网上好像还没有比较详细实用的文章!

合并 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 入门更新的慢一些,还在难产中。。。而数据分析入门已经完成,感兴趣的朋友可以翻看往期的推文查看

如果你觉得来来回回翻看推文太不方便了,没关系,在公众号后台回复“电子书”,就可以免费获取这本入门教程电子书了,满满的诚意哦!

看到这里,还不给个“在看”或点个“”嘛!

相关文章
|
5天前
|
Rust 数据挖掘 数据处理
Polars库:数据分析的新星,性能与易用性的完美结合
Polars库:数据分析的新星,性能与易用性的完美结合
16 0
|
12天前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
在数据驱动时代,Python 以强大的生态系统成为数据科学的首选语言,而 Scikit-learn 则因简洁的 API 和广泛的支持脱颖而出。本文将指导你使用 Scikit-learn 进行机器学习模型的训练与评估。首先通过 `pip install scikit-learn` 安装库,然后利用内置数据集进行数据准备,选择合适的模型(如逻辑回归),并通过交叉验证评估其性能。最终,使用模型对新数据进行预测,简化整个流程。无论你是新手还是专家,Scikit-learn 都能助你一臂之力。
64 8
|
4天前
|
数据挖掘 API 数据处理
Python 数据分析及预处理常用库
Python自身数据分析功能有限,需借助第三方库增强。常用库包括NumPy、pandas、Matplotlib等。NumPy由Numeric发展而来,提供了多维数组对象及各种API,支持高效的数据处理,如数学、逻辑运算等,常作为其他高级库如pandas和Matplotlib的依赖库。其内置函数处理速度极快,建议优先使用以提升程序效率。
7 0
|
3月前
|
机器学习/深度学习 数据采集 算法
数据海洋中的导航者:Scikit-learn库引领Python数据分析与机器学习新航向!
【7月更文挑战第26天】在数据的海洋里,Python以强大的生态成为探索者的首选,尤其Scikit-learn库(简称sklearn),作为一颗璀璨明珠,以高效、灵活、易用的特性引领数据科学家们破浪前行。无论新手还是专家,sklearn提供的广泛算法与工具支持从数据预处理到模型评估的全流程。秉承“简单有效”的设计哲学,它简化了复杂模型的操作,如线性回归等,使用户能轻松比较并选择最优方案。示例代码展示了如何简洁地实现线性回归分析,彰显了sklearn的强大能力。总之,sklearn不仅是数据科学家的利器,也是推动行业进步的关键力量。
43 3
|
3月前
|
机器学习/深度学习 算法 数据挖掘
Python数据分析革命:Scikit-learn库,让机器学习模型训练与评估变得简单高效!
【7月更文挑战第27天】在数据驱动时代,Python以丰富的库成为数据科学首选。Scikit-learn因简洁高效而备受青睐,引领数据分析革命。本文引导您使用Scikit-learn简化机器学习流程。首先通过`pip install scikit-learn`安装库。接着使用内置数据集简化数据准备步骤,例如加载Iris数据集。选择合适的模型,如逻辑回归,并初始化与训练模型。利用交叉验证评估模型性能,获取准确率等指标。最后,应用训练好的模型进行新数据预测。Scikit-learn为各阶段提供一站式支持,助力数据分析项目成功。
48 0
|
3月前
|
机器学习/深度学习 算法 数据挖掘
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的豆瓣电影数据分析可视化系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的豆瓣电影数据分析可视化系统附带文章源码部署视频讲解等
35 0
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的职位数据分析文章源码部署视频讲解等
基于springboot+vue.js+uniapp的职位数据分析文章源码部署视频讲解等
25 0
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的房价数据分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的房价数据分析附带文章源码部署视频讲解等
16 0
|
3月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的数据分析岗位招聘信息与分析附带文章源码部署视频讲解等
16 0

热门文章

最新文章

下一篇
无影云桌面