PDF如何添加目录

[toc]

[begin]不[/begin]知道大伙有没有遇到这样的问题:在网上找的很多PDF都没有目录,尤其是一些扫描版pdf,或者是有目录但是页码错误等等。这样非常不方便我们查阅和学习,为了解决这些问题,我们可以自己手动给PDF添加目录,添加的过程很简单,下面就教大家如何添加目录。

修改目录我们需要FreePic2Pdf(下载链接在后文)和一个文本编辑器(这里我使用的是sublime text)

查找目录

以《Orange’s 一个操作系统的实现》为例。这本书是扫描版的没有目录,如图:

image-20200131142740876

那么我们开始制作书签。首先我们要获得书签的文本。由于是扫描版,目录文本无法选中,因此我们在百度上搜索这本书的目录,一般这本书的百度百科都有目录。

image-20200131143106649

但是这个目录没有页码,所以我们再找其他的(当然你也可以手动输入目录)

找到一个合适的:

image-20200131143421497

将目录复制粘贴到文本编辑器中(这里我用的是sublime),我们需要修改文本的格式,PDF书签需要特定格式才能正确添加到PDF中。

修改目录

修改页码

首先需要注意的一点是页码。这本书的页码是从正文开始算的,也就是说前面序言目录等等都不算在页码的范围内,但是添加的目录中的页码需要算上序言,也就是说在这本书中第一章不是从第2页开始的,而是从22页开始的,所以页码需要进行修改。

修改页码有两种方式,一种是批量修改每个条目的页码,是比较麻烦的。另一种就需要用到FreePic2Pdf这个软件了。这里先介绍第一种。

image-20200131144118440

批量修改页码,我们使用excel进行修改。直接复制粘贴无法将目录正确的复制进表格中,文本只会出现在第一列,而我们的想法是让页码单独一页,这样我们就能批量修改了,那么我们首先修改目录文本的格式使之适配excel。

首先看我的原本的文本是这样的

image-20200131144817437

可以看到页码和标题间隔着一个空格(sublime中一个空格显示为一个 · )那么就可以通过一个可区分和定位的特征(数字前有一个空格)对这个位置的空格进行批量操作,将这一个空格替换成英文逗号。

ctrl+h进行替换。这里为了准确定位需要使用正则表达式进行替换(只要掌握基础的正则表达式语法即可,可以看看这篇教程)。\d代表一个数字,+表示匹配前面的字表达是一次或多次(也就是说\d可以是一个或多个)。我们要修改的是数字前面的一个空格,而数字要保留,所以我们输入空格+(\d+)()中括到的是我们要保存的,如图:

image-20200131152054846

可以看到sublime自动识别出了定位的范围,最好这时候再检查一下,看看有没有不是页码的地方也符合定位条件(数字前面一个空格),有时候标题也会出现匹配到的情况,这里检查之后都正常,只有页码匹配到了,非常好,接下来就将空格修改成逗号即可。表示取出第一个括号匹配的内容(就是第二个括号,这里就这一个括号)

所以替换的语句的意思就是替换成,+\d+

全部替换后如图:

image-20200131152727154

可以看到已经全部替换完成了。

保存成.csv文件,然后新建一个excel的空白文件,打开空白文件,点击数据->自文本

image-20200131160138386

然后选中csv文件,点击下一步

image-20200131160241926

分隔符号选逗号然后点下一步->完成-> 确认。

image-20200131160323494

这样就得到了待修改的目录。

image-20200131160422795

批量修改页码,不会改的看这里

然后复制粘贴到sublime。这样我们的页码就修改好了。同时在粘贴到sublime之后我们会发现页码前已经变成了制表符,节省了我们再批量修改成制表符的麻烦(sublime中制表符是以横杠:image-20200131162804210的形式表示)

修改章节分级

页码修改好后,我们还要修改章节的分级,例如1.1在第一章下,1.1.1在1.1下,如果你认为目录不用折叠也无所谓,那你可以不做修改,但是,如果你想要目录可以分级折叠,例如下图,那么我们还需要修改目录的格式。

image-20200131163225180

修改的方式是添加缩进,一级标题不添加缩进,二级标题加一个制表符,三级缩进加两个制表符,以此推类。

修改还是通过正则表达式进行修改。当然手改也可以。

本书中,上下篇是一级目录,所以不用修改,第一章第二章是二级标题,所以在开头加一个缩进。\t表示一个制表符。

image-20200131163748622

1.1是三级标题,所以有两个制表符,^表示字符串的开始,也就是说要匹配的是开头一个或多个数字,然后一个点然后接着一个或多个数字然后一个空格,也就是我们要找的三级标题。注意最后有个空格来限定是1.1而不是1.1.1。

image-20200131164158103

2.1.1是四级标题也就是三个制表符,不赘述了,如图:

image-20200131164600065

最终得到的目录如图:

image-20200131164635505

这样一个符合格式的目录就做好了。接下来就是添加目录了。

添加目录

添加目录需要用到FreePic2Pdf(链接:https://pan.baidu.com/s/1GCMIlwLSL1Z4eI64XrZeTQ 提取码:146l )

软件界面如图

image-20200131165159064

点击右下角更改PDF,选择从PDF取书签,把pdf拖进去点击开始,然后在你pdf的目录下会生成一个同名的文件夹,打开,有这两个文件。

image-20200131165420390

这个txt就是你的目录了,由于开始时没有目录,所以这是个空文件,将我们刚才修改好的目录复制进去并保存。然后再次使用FreePic2Pdf,选择往PDF挂书签,它默认就是刚才的文件,所以直接点击开始即可

image-20200131165725870

编辑完成即成功。打开PDF文件看看,成功挂上了书签!

image-20200131165831626


使用FreePic2Pdf解决页码偏移问题

这个方法在当时我写这篇博客的时候还不知道,现在补上。

FreePic2Pdf生成的文件夹中,除了有txt的目录以外,还有一个itf的配置文件。

使用sublime打开如下:

basepage表示目录中的第一页代表实际页面的数值,例如这里为4就说明目录的第一页对应pdf的第4页。

通过修改这个basepage就可以很方便的解决页码偏移问题。