PDF电子书制作书签目录全过程

所需软件

以下两款软件都很容易找到。

FreePic2Pdf

用于存取PDF的书签,我们做好目录后,用该软件把目录存入PDF中。

Notepad++

一款功能强大的文本编辑器,这里我们主要用到它的正则表达式替换功能。用其他有相同功能的编辑器也可以。
也可以使用VS Code

实现思路

首先我们要获得目录的文字,如果是文字版PDF,那直接复制粘贴皆可;如果是扫描版的PDF,则先从PDF中取出目录,再使用OCR把图片装换成文字。然后,我们要把文字转换为特定的格式,它才可以被当成书签目录使用。最后使用FreePic2Pdf把目录存入PDF,就大功告成了!

第一步 检查PDF页面序号是否正确

使用Adobe Acrobat 等PDF软件打开组织页面,确认目录的页码是否和正文的序号匹配,如果不是,先选择正文前面的页面,换一个新的序号,使得正文序号和目录保持一致。若不进行修改,目录即使制作出来也无法跳转到对应页面。
在这里插入图片描述

第二步 从PDF中取出目录

  1. 首先我们使用FreePic2Pdf取出PDF的标签,操作如下图:
    FreePic2Pdf取出PDF的标签
    取出完成后,默认状态下,PDF文件的同目录下会生成一个与PDF文件同名的目录,里面存放了我们刚刚生成的标签文件,其中FreePic2Pdf_bkmk.txt文件就是我们取出的标签文字,我们待会要把做好的目录保存到这里面去。

  2. 对于文字版PDF,直接打开把目录部分复制到FreePic2Pdf_bkmk.txt即可。

  3. 对于扫描版PDF,首先我们要取出目录部分。可使用PDF软件或者该网站把目录部分保存为一个独立的PDF文件或者几张图片,再使用OCR软件或者在线OCR网站得到目录文字。
    注:最近搜狗输入法上线了智能助手,也有OCR功能,识别率非常不错。可以用它比较方便的识别,就免去处理图片的麻烦。
    在这里插入图片描述
    在这里插入图片描述
    用上面的OCR往往是文字和页码在拆开在两行,这时可以用python代码把它们处理一下:
    将文本放在D://data.txt中,使用VScode运行,就可以得到文字和页码在一行的结果,有问题及时修改即可

with open( 'D://data.txt', 'r' , encoding='utf-8') as f:
    i=0
    string=""
    for line in f.readlines():
        line=line.strip()
        if(i%2==0):
            string = line
        else:
            string=string+'\t'+line
            print(string)
        i=i+1


        

第三步 使用正则表达式匹配目录格式

得到目录文字后,我们需要将其变成特定的格式才可以被识别成书签目录。
格式:每个制表符为一个层次,每行后面加一个制表符再加上页码

第一章 AAA
	1.1 AAA	1
		1.1.1 AAA	3
		1.1.2 AAA	5
	1.2 AAA	6
	1.2 AAA	8

我们拿到的目录文字一般是这样的

第一章 AAA
1.1AAA........................................................1
1.1.1 AAA........................................................3
1.1.2 AAA........................................................5
1.2 AAA........................................................6
1.2AAA........................................................8

如果是OCR识别出来的文字,往往不可能全部都识别对,要对文字内容进行对照,改成正确的,特别是X.X.X(X为数字)的格式的.有可能识别成了其他符号

接下来我们使用Notepad++的正则表达式替换得到目的格式,用Notepad++打开FreePic2Pdf_bkmk.txt,按Ctrl+H打开替换窗口,把选中模式改为正则表达式,替换时建议使用替换,而不是全部替换,万一出现意外可以及时发现,不过出现了也就按Ctrl+Z撤回就是了。

  1. 去除多余的符号

查找内容:

^(\d+(\.\d+)+)\s*([\u4e00-\u9fa5a-zA-Z0-9]*)([^\u4e00-\u9fa5a-zA-Z0-9]*)(\d+)$

替换内容:

$1 $3\t$5

说明:

正则表达式含义备注
^(\d+(.\d+)+)匹配开头为X.X.X字符串(X为整数)要是匹配第X章,则改成 (第\d+章) 。
\s*匹配0或多个空格字符有时识别的结果会多一些空格
([\u4e00-\u9fa5a-zA-Z0-9]*)匹配标题内容(包含了中文大小写英文字母和数字)如果标题中含有符号,要往中括号里面添加上这个符号,不然会识别错误。如添加空格和-号和、号,改成([\u4e00-\u9fa5a-zA-Z0-9’ '-\、]*),有一些符号需要转义,在前面加\
([^\u4e00-\u9fa5a-zA-Z0-9]*)匹配页码和标题间的各种符号(除了中文大小写英文字母和数字外的字符)
(\d+)匹配页码
$匹配结尾
$1代表了上面匹配到的正则表达式中第一个()括起来的值$3和$5依次类推
\t代表了一个制表符

经过这层处理,得到的目录应该类似下面这样:

第一章 AAA
1.1 AAA	1
1.1.1 AAA	3
1.1.2 AAA	5
1.2 AAA	6
1.2 AAA	8
  1. 添加层次
    这一步我们按照要求在前面添加制表符。如下操作

第一步
查找内容:

^(\d+\.\d+\s)

替换内容:

\t$1

第二步
查找内容:

^(\d+\.\d+\.\d+\s)

替换内容:

\t\t$1 

如果层次还要继续划分,可以照着添加替换,每多一层,则多一个\t。
正常来说,完成这一步格式就已经符合要求了。

第四步 把书签目录存入PDF文件中

打开FreePic2Pdf挂上PDF标签,操作如下图:
FreePic2Pdf挂上PDF标签
出现编辑成功提示则说明你的PDF目录已经制作好了,赶紧打开看看吧!
如果出现失败,有可能是文件被占用了,关闭相关软件重试看看。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值