值得一提的是,vFlat Scan 的「双页捕获」功能在扫描书籍时非常实用,能够有效减少扫描的工作量。当然,如果某些场景 vFlat Scan 识别双页不准确,你也可以关闭这个功能,在后期处理时使用 MuPDF 或 Briss 分割扫描得到的 PDF。
PDF 书签和 Markdown 中的标题一样,也是有层级的,比如在《遏制民族主义》这本书中,第一章 民族主义的困惑是一级标题,民族主义的界定 则是二级标题。为了对不同的标题层级进行区分,我们借用 Markdown 的语法,将其改写为:
需要注意的是,通过 OCR 得到的页码是书籍页眉或页脚中注明的页码,并非 PDF 文件中的真实页码,这是由于书籍的第 1 页通常是从正文第一页开始计算的,在正文之前还有序言、致谢、目录等部分,而 PDF 的页码则总是从第 1 页开始计算的。在《遏制民族主义》这本书中,从 PDF 第 1 页开始计算,正文第 1 页实际上位于第 10 页,前面的 9 页是前言部分。
使用 Shell 脚本可以非常容易地实现上面这个转换:
将上面的目录标题和对应页码这两个文件合并到一起:
容易发现,每个书签条目由 4 行组成:
得到如下的结果:
然后使用下面的命令将其中已有的无用书签全部移除:
分步执行以上各个步骤略显麻烦,可以将这些命令集中在一起,写在一个 Makefile 中:
在 Adobe Acrobat 中,打开需要调整页码的 PDF,在左侧缩略图中选中页面,点击右键选择「Page Labels…」,然后在出现的「Page Numbering」窗口中进行调整,包括需要更改的页码范围、页码前缀、起始页码等,其中 Style 一栏包括 6 个选项:
接下来点击 j 移动光标到下一行,再点击 o 在下方插入一个空行并进入 Insert Mode,然后粘贴设置页码的文本,例如:
上面的示例中,0 << /P (Cover) >> 表示第 1 页的页码标签为 Cover(PDF 中第 1 页的索引是 0 而不是 1),1 << /S /R >> 表示 2–4 页的页码标签为大写罗马数字,4 << /S /r >> 表示 5–24 页的页码标签为小写罗马数字,24 << /S /D >> 表示从 25 页到最后一页,页码标签全都为阿拉伯数字。
粘贴完成之后,按下 Esc 键退出 Insert Mode,进入 Normal Mode,然后输入 :wq 保存更改并退出 Vim。
在本文中,我分享了将纸质书籍扫描成 PDF 并对其进行 OCR、添加书签、调整页码等步骤,基本实现了纸质书的「电子化」。当然,其中的部分操作不仅限于扫描版 PDF,对于一般的 PDF 文件也是适用的。如果完成上述操作之后,PDF 的体积变得非常大,你可以选择将它压缩一下,然后就可以愉快地阅读与分享电子版 PDF 书籍了。
如果你恰好有一本稀缺甚至绝版的纸质书,不妨按照本文分享的方法,把它扫描成 PDF 分享在互联网上,说不定地球上某个角落的人正在焦急地寻找这本书呢。促进知识的开放,需要我们每个人做出自己微小的贡献。试想,没有其他人的上传,Z-Library 怎么可能会有如此丰富的书籍呢?这也是我写这篇文章的最初动机:发挥去中心化的力量,缩小获取知识的鸿沟,促进知识的开放。