Klapring

优化扫描版电子书指北

什么是优化的电子书

如果不看内容,只看阅读的方便程度,一本优秀的电子书应该是怎样的?最优秀的自然是由制作优良的 LaTeX 或 Typst 源码直接编译生成的 PDF 文件,有可跳转的目录,有目录书签,有可搜索文本。但这种电子书除非是开源的,否则只会在制作者的小圈子内流通,不会轻易流通。次一级,便是制作优良的扫描版电子书了。

一个制作优良的扫描版电子书应该是怎样的?文字图片清晰,有目录书签与可搜索文本,这是我对制作优良的扫描版电子书的定义。我在学习一些专业课程、获取某些专业资料时,经常会遇到一些扫描版的电子书,这些电子书有一部分已经制作好了正确的目录书签,方便进行阅读,但文本不可搜索;更多的只有页码作为书签,甚至完全没有任何书签。这样的电子书显然是不方便阅读的,会极大降低学习效率,因此,我选择自力更生,对这些扫描版电子书进行优化。

怎么优化扫描版电子书

考虑到可能的版权问题,我选择使用我自己的课程作业 pdf,通过开源在线项目 Look Scanned 将其变成扫描件来演示。

rwv/lookscanned.io

图像处理

首先,需要将 PDF 的图像全部提取出来,这里 Windows 用户可以使用维护了 12 年、近两年开源的老牌免费 PDF 处理工具箱「PDF 补丁丁」:

wmjordan/PDFPatcher

macOS 与 Linux 用户可以使用下面的项目作为替代品:

Stirling-Tools/Stirling-PDF

Stirling-PDF 的图像提取功能似乎不够完善,不能直接提取扫描件的图像,需要使用 PDF转图像功能才能正常导出图像,速度慢不少。

提取出全部图像后,就该对其进行处理了。Scantailor Advanced 是一个开源的扫描件处理软件,虽然其基于的 Scantailor 已经 Public Archive 了,但是依旧好用。

4lex4/scantailor-advanced

在软件中新建项目,选择之前导出的图片,就可以开始图片处理了。

ScanTailor Advanced 界面:左侧是处理步骤列表,中间显示页面预览,右侧为缩略图面板。
图 1 Scantailor Advanced 页面

页面是全英文,没有中文翻译,但是看懂难度不大。点击右上角栏目右边的小绿三角就可以对所有页面执行当前的操作了,基本全部使用 auto 即可,效果相当不错。需要注意,右侧的选项调整默认只对当前页面生效,需要使用「Apply to」按钮来应用到全部页面。

ScanTailor Advanced 的 Select Content 步骤:页面被蓝色选框标出内容区域,左侧面板使用 Auto。
图 2 Scantailor Advanced 页面

需要注意的是,中文文档可能需要在 output 中关闭「Savitzky-Golay smoothing」,不然文字会糊成一团。DPI 可以调高一点,不然容易看不清,全是黑白页面的话 DPI 拉高,文件大小也不会太大。

一路优化完成后,只要 output 中处理了全部页面且效果满意,就可以关闭软件了,输出的图片会保存在 out 目录中。接着使用 PDFPatcher 或 Stirling-PDF 合并导出的图片为PDF,第一步处理大功告成。

处理后的扫描页局部放大:标题与公式的文字边缘清晰锐利。
图 3 效果 1
处理后的扫描页局部:两幅数值实验图表与下方的说明文字。
图 4 效果 2

可以看出文字效果不错,图像效果有点差。

OCR

第二步,是对 PDF 做 OCR 处理,这里需要用到一个开源项目:

hiroi-sora/Umi-OCR

这是一个支持多种开源 OCR 模型的开源项目,支持 Windows 7 及以上的 Windows x64 平台与 Linux x64 平台,可以方便地将扫描版的 PDF 转换为带有可搜索图像文本的 PDF,同时使用了嵌入 Python 解释器,可以让小白开箱即用。

Umi-OCR 主界面:左侧功能菜单选中「批量文档」,右侧列出支持导入的文档格式。
图 5 Umi-OCR 页面展示
Umi-OCR 的批量文档页面:文档列表与开始任务按钮,右侧是识别与内容提取模式设置。
图 6 Umi-OCR 页面展示

对于 macOS 用户,由于该项目作者没钱买 mac (好真实的理由),所以目前只能通过 Docker 或虚拟机的方式来使用。

由于该软件界面一目了然,因此不做过多说明,选择批量文档,内容提取模式选择「混合OCR/原文本」即可。

目录书签制作

第三步,则是制作目录书签。这里同样需要用到一个开源项目:

chroming/pdfdir

该项目可以将给定的目录作为书签嵌入到 PDF 当中。目录的获取有几种办法,首先是去一些有该电子书信息的的网站上查找是否有目录信息,有的话用网站上的最好;如果找不到现成信息,则可以使用刚才 OCR 好的 PDF,利用书里的目录来制作,但由于 OCR 识别的不稳定性,这种方式通常需要手动修正文本。

PDFDir 界面:左侧粘贴目录文本,中间为正则分层选项,右侧预览章节目录与实际页码。
图 7 制作目录

如图所示,该工具支持自定义正则表达式来匹配目录层级,也支持设置页差,可以方便快捷地将目录书签注入到 PDF 中。

效果演示

将源文件和制作的优化版扫描文件进行对比,可以看出效果还是不错的:

PDF 阅读器截图:优化后的扫描版,书签栏列出带编号的目录,正文是「1 格式描述」页面。
图 8 扫描版
PDF 阅读器截图:源文件的书签栏与「1 格式描述」正文页面,用于和扫描版对比。
图 9 源文件