这篇文章将讲述如何为 PDF 添加书签目录,但并也不局限于此,你还可以用同样的方法修改已有的书签目录。
这几天在学习编译原理的语法分析,打算看一看《Parsing Techniques》这本经典书籍。
结果打开之前下载的 PDF 一看,六百多页的 PDF 连个书签目录都没有,找起来特别费劲。
于是就根据它的目录页面,给它添加一个书签版的目录,方便以后浏览。
如果你熟悉 Vim,整个过程大概只需要五分钟左右。
工具:
- Vim(重点)
- FreePic2Pdf
- PdgCntEditor
Vim 不用解释了,能胜任各种文本编辑工作的万能编辑器,用了几年之后还会时不时地带来惊喜。这里用 Vim 的正则表达式做了各种替换和删除操作,原本很麻烦的事情在 Vim 中只需要几个命令就能解决,你可以使用其它正则替换工具,但不建议用普通编辑器来完成,因为几分钟能搞定的事情将需要折腾半天才能完成了。
后面两个小工具是配套使用的,FreePic2Pdf 是用于修改 PDF 的工具,可以将一组图片转换成一个 PDF 文件,也可以对某个 PDF 文件进行修改,包括目录和参数等等。PdgCntEditor 是专门编辑目录的工具,用它可以更方便地对 PDF 目录进行修改。
接下来就是 PDF 书签目录的制作过程。
生成 PdgCntEditor 目录
1. 提取目录信息
从 PDF 中复制目录文本,并粘贴到 Vim 中:
2. 删除多余文本
通常 PDF 复制的文本格式都或多或少会有一些问题,特别是当你跨页复制时,会有页眉和页脚的文字夹杂在目标文本中间。
因此,通过命令 :%s/\d\zs\D\+$//g
删除页码后面多余的文本:
由于书中给的是三级目录,数量太多反而不好查找,因此可以只保留到二级目录,把三级目录删除,命令 :g/^\d\+.\d\+.\d/d
:
3. 整理格式
目标格式:
一级目录A 页码
二级目录a 页码
一级目录B 页码
二级目录b 页码
PdgCntEditor 中对目录的分级是根据缩进(Tab)来确定的,因此一级目录不用缩进,二级目录行首应该有一个缩进,此处已经删除了三级目录,如果没删除的话,应该有两个缩进。
页码应该跟在目录名之后,中间用一个 Tab 隔开。
所以这里只需要给二级目录添加一个缩进即可,命令 :%s/\v^\ze(\d+\.\d+)/\t/
:
然后将目录名和页码中间的字符串替换为 Tab,命令 :%s/\v(\s\.)+\s/\t/
:
4. 页码重定位
这是一个很常见的问题,书籍目录页中标注的页码通常不等于实际 PDF 页码,但往往是存在一个固定的差值。
上面看到目录中的 Introduction 页码为 1,但实际上是 23:
实际的页码比目录中给出的页码大 22,即偏移值为 +22。
因此,我们将所有的页码都加上 22,命令 :%s/\d\+$/\=submatch(0)+22/
:
现在,我们得到了一个规范的目录了。
将目录导入到 PDF 中
制作好目录之后,我们打开 FreePic2Pdf 程序,点击“更改PDF”:
接着选择“从 PDF 取书签”,这步是为了得到接口文件,即使 PDF 本身并没有书签:
然后选择“往 PDF 挂书签”,点击图中标号 2 处,会打开 PdgCntEditor 让你编辑目录信息:
将上面生成的目录文本粘贴进来,保存后关闭:
最后点击“开始”完成书签目录的导入:
效果
添加目录前:
添加目录后:
相关文章
今天的文章PDF 没有书签目录?自己动手五分钟生成!分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/20037.html