Python功能实现:为pdf电子书籍生成书签目录

该博客介绍了一种使用Python脚本配合PdfEditor软件自动生成PDF书签目录的方法。脚本通过正则表达式处理原始书签目录,调整页码并添加缩进,以创建易于导航的目录结构。用户需要提供origin.txt文件并了解如何使用PdfEditor。

      今天搞了本pdf电子书看,奈何没有书签目录,用acrobat DC看起来很难受,所以索性写了个python脚本,配合PdfEditor软件能够较为方便地生成可跳转页码的书签目录。

注意:

1、用python3运行我提供的脚本。

2、请提前下载PdfEditor软件并了解如何用其制作书签目录。

3、脚本运行需要提供文件origin.txt文件,内容是书籍对应的原始书签目录。

4、实现思路主要使用了正则匹配,大家可以去了解下python re库的使用,正则规则最好根据origin.txt自行分析调整。

5、大家主要参考程序的实现思路,请根据实际情况进行修改。

脚本内容:

# 作者:Melody
# 功能:PDF书籍目录生成脚本,生成目标文件后需要配合PdfEditor软件使用
# 时间:2021/5/30
import re
pageOffset = 16 # 印刷链接页码与实际跳转页码偏移量
originFileName = 'origin.txt'
resultFileName = 'result.txt'

# 获得目标文件绝对路径
nameList = __file__.split('\\')
nameList.pop(-1) # 去除脚本文件名
nameList.append(originFileName)
path = "//".join(nameList)
f = open(path, 'r', encoding='utf-8')
info = f.read()
f.close()
myList = list()

# 找到无效小数点对应区间
cmd = r'[^\.]\.{2,}(\d| )'
for match in re.finditer(cmd, info):
	myList.append((match.start()+1, match.end()-2))

# 删除无效的小数点
start = 0
end = myList[0][0]
newInfo = ""
cnt = 0
for i in range(len(myList)): 
	if cnt != 0:
		end = myList[i][0]
		newInfo += info[start+1:end] + "\t"
	else:
		newInfo += info[start:end] + "\t"
	start = myList[i][1]
	cnt += 1

# 给页码加偏移
splitForPage = newInfo.split('\n') 
newInfo = ""
for item in splitForPage:
	temp = item.split('\t')
	try:
		num = int(temp[-1]) + pageOffset
		temp[-1] = "\t" + str(num)
	except(ValueError):
		pass
	item = "".join(temp)
	newInfo += item + "\n" 

# 删除目录无效章节
splitForDelete = newInfo.split('\n') 
newInfo = ""
for item in splitForDelete:
	if item != "":
		if item[0] == "测" or item[0] == "例":
			continue
		else:
			newInfo += item + "\n"
	else:
		continue

# 给章节加缩进,根据小数点个数判断章节层级
splitForCap = newInfo.split('\n') 
newInfo = ""
for item in splitForCap:
	temp = item.split(" ")
	capter = temp[0]
	numPoint = capter.count(".")
	if numPoint == 1:
		item = '\t' + item
	if numPoint == 2:
		item = "\t\t" + item
	newInfo += item + "\n"

nameList.pop(-1)
nameList.append(resultFileName)
path = "//".join(nameList)
f = open(path, 'w', encoding='utf-8')
f.write(newInfo)
f.close()

运行结果:

origin.txt内容:(自己想办法搞到这些信息,我是直接从pdf里复制粘贴的)

result.txt:

用PdfEditor打开目标pdf,将result.txt内容复制到软件里,直接保存就好了!太强了这软件!

正则表达式学习网站:

https://regex101.com/r/dmRygT/1

https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md

Python学习手册(第3版).pdf包括:   类型和操作——深入讨论Python主要的内置对象类型:数字、列表和字典等。   语句和语法——在Python中输入代码来建立并处理对象,以及Python一般的语法模型。   函数——Python基本的面向过程工具,用于组织代码和重用。   模块——封装语句、函数以及其他工具,从而可以组织成较大的组件。   类和OOP——Python可选的面向对象编程工具,可用于组织程序代码从而实现定制和重用。   异常和工具——异常处理模型和语句,并介绍编写更大程序的开发工具。 《Python学习手册(第3版)》讲述了:Python可移植、功能强大、易于使用,是编写独立应用程序和脚本应用程序的理想选择。无论你是刚接触编程或者刚接触Python,通过学习《Python学习手册(第3版)》,你可以迅速高效地精通核心Python语言基础。读完《Python学习手册(第3版)》,你会对这门语言有足够的了解,从而可以在你所从事的任何应用领域中使用它。, 《Python学习手册(第3版)》是作者根据过去10年用于教学而广为人知的培训课程的材料编写而成的。除了有许多详实说明和每章小结之外,每章还包括一个头脑风 暴:这是《Python学习手册(第3版)》独特的一部分,配合以实用的练习题和复习题,让读者练习新学的技巧并测试自己的理解程度。, 《Python学习手册(第3版)》包括:, 类型和操作——深入讨论Python主要的内置对象类型:数字、列表和字典等。, 语句和语法——在Python中输入代码来建立并处理对象,以及Python一般的语法模型。, 函数——Python基本的面向过程工具,用于组织代码和重用。, 模块——封装语句、函数以及其他工具,从而可以组织成较大的组件。, 类和OOP——Python可选的面向对象编程工具,可用于组织程序代码从而实现定制和重用。, 异常和工具——异常处理模型和语句,并介绍编写更大程序的开发工具。, 讨论Python 3.0。, 《Python学习手册(第3版)》让你对Python语言有深入而完整的了解,从而帮助你理解今后遇到的任何Python应用程序实例。如果你准备探索Google和YouTube为什么选中了Python,《Python学习手册(第3版)》就是你入门的最佳指南。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值