PDF 没有书签目录?自己动手五分钟生成!

PDF 没有书签目录?自己动手五分钟生成!这篇文章将讲述如何为 PDF 添加书签目录,但并也不局限于此,你还可以用同样的方法修改已有的书签目录。 这几天在学习编译原理的语法分析,打算看一看《Parsing Techniques》这本经典书籍。 结果打开之前下载的 PDF 一看,六百多页的 PDF 连个书签目录都没有,找…

这篇文章将讲述如何为 PDF 添加书签目录,但并也不局限于此,你还可以用同样的方法修改已有的书签目录。

这几天在学习编译原理的语法分析,打算看一看《Parsing Techniques》这本经典书籍。
结果打开之前下载的 PDF 一看,六百多页的 PDF 连个书签目录都没有,找起来特别费劲。

于是就根据它的目录页面,给它添加一个书签版的目录,方便以后浏览。

如果你熟悉 Vim,整个过程大概只需要五分钟左右。

工具:

  • Vim(重点)
  • FreePic2Pdf
  • PdgCntEditor

Vim 不用解释了,能胜任各种文本编辑工作的万能编辑器,用了几年之后还会时不时地带来惊喜。这里用 Vim 的正则表达式做了各种替换和删除操作,原本很麻烦的事情在 Vim 中只需要几个命令就能解决,你可以使用其它正则替换工具,但不建议用普通编辑器来完成,因为几分钟能搞定的事情将需要折腾半天才能完成了。

后面两个小工具是配套使用的,FreePic2Pdf 是用于修改 PDF 的工具,可以将一组图片转换成一个 PDF 文件,也可以对某个 PDF 文件进行修改,包括目录和参数等等。PdgCntEditor 是专门编辑目录的工具,用它可以更方便地对 PDF 目录进行修改。

接下来就是 PDF 书签目录的制作过程。

生成 PdgCntEditor 目录

1. 提取目录信息

从 PDF 中复制目录文本,并粘贴到 Vim 中:
PDF 没有书签目录?自己动手五分钟生成!

2. 删除多余文本

通常 PDF 复制的文本格式都或多或少会有一些问题,特别是当你跨页复制时,会有页眉和页脚的文字夹杂在目标文本中间。

因此,通过命令 :%s/\d\zs\D\+$//g 删除页码后面多余的文本:
PDF 没有书签目录?自己动手五分钟生成!

由于书中给的是三级目录,数量太多反而不好查找,因此可以只保留到二级目录,把三级目录删除,命令 :g/^\d\+.\d\+.\d/d
PDF 没有书签目录?自己动手五分钟生成!

3. 整理格式

目标格式:

一级目录A   页码
    二级目录a   页码
一级目录B   页码
    二级目录b   页码

PdgCntEditor 中对目录的分级是根据缩进(Tab)来确定的,因此一级目录不用缩进,二级目录行首应该有一个缩进,此处已经删除了三级目录,如果没删除的话,应该有两个缩进。

页码应该跟在目录名之后,中间用一个 Tab 隔开。

所以这里只需要给二级目录添加一个缩进即可,命令 :%s/\v^\ze(\d+\.\d+)/\t/
PDF 没有书签目录?自己动手五分钟生成!

然后将目录名和页码中间的字符串替换为 Tab,命令 :%s/\v(\s\.)+\s/\t/
PDF 没有书签目录?自己动手五分钟生成!

4. 页码重定位

这是一个很常见的问题,书籍目录页中标注的页码通常不等于实际 PDF 页码,但往往是存在一个固定的差值。

上面看到目录中的 Introduction 页码为 1,但实际上是 23:
PDF 没有书签目录?自己动手五分钟生成!

实际的页码比目录中给出的页码大 22,即偏移值为 +22。

因此,我们将所有的页码都加上 22,命令 :%s/\d\+$/\=submatch(0)+22/
PDF 没有书签目录?自己动手五分钟生成!

现在,我们得到了一个规范的目录了。

将目录导入到 PDF 中

制作好目录之后,我们打开 FreePic2Pdf 程序,点击“更改PDF”:
PDF 没有书签目录?自己动手五分钟生成!

接着选择“从 PDF 取书签”,这步是为了得到接口文件,即使 PDF 本身并没有书签:
PDF 没有书签目录?自己动手五分钟生成!

然后选择“往 PDF 挂书签”,点击图中标号 2 处,会打开 PdgCntEditor 让你编辑目录信息:
PDF 没有书签目录?自己动手五分钟生成!

将上面生成的目录文本粘贴进来,保存后关闭:
PDF 没有书签目录?自己动手五分钟生成!

最后点击“开始”完成书签目录的导入:
PDF 没有书签目录?自己动手五分钟生成!

效果

添加目录前:

PDF 没有书签目录?自己动手五分钟生成!

添加目录后:

PDF 没有书签目录?自己动手五分钟生成!

相关文章

喜欢

今天的文章PDF 没有书签目录?自己动手五分钟生成!分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/20037.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注