如何在本地将 DjVu 转换为 PDF:一次初步尝试

DjVu 是一种常见于互联网的扫描版的电子书分发格式。由于把内容部分和背景部分分开保存,DjVu 格式的电子书能在较小体积的前提下仍然保证内容部分的锐利。线上一些网站将 DjVu 转换为 PDF 之后在锐度严重损失的前提下,体积通常会膨胀数十倍。这些线上工具也并未提供任何可以调整的参数。

在移动设备上进行 DjVu 材料阅读的现状

然而将 DjVu 转换为 PDF 的需求仍然存在,因为在不少系统上围绕 DjVu 搭建的基础设施极为有限。譬如在 iOS 上,许多应用间能够直接传输、导入、阅读、批注 PDF,可以说一整套工具都是围绕着 PDF 搭建的。而反观 DjVu,目前我只找到了一款叫做 BiLibre 的应用,能够一定程度上支持使用 Apple Pencil 批注,这款程序还只是一个 KyBook 的程序的试验田而已,功能比 PDF 阅读器而言可以说还是相当不完善的。

可能由于需求较少,目前也基本没有在本地找到一套完整可控的工具链能完成这一系列操作。

将 DjVu 转换为 PDF

目前探索来看,比较好的一对工具是 DjVuLibre 和 Ghostscript。

DjVuLibre 是个开源的 DjVu 处理包。它提供了一个简易的图形化界面,能够进行简单的 DjVu 阅读。它的一系列命令行工具,能够比较好地进行 DjVu 的制作、解包工作,能把 PDF 以及许多图像格式转换为 DjVu。它同时也提供了编程库,被 SumatraPDF 等阅读器作为 DjVu 底层支持库使用。

Ghostscript 则是老牌的 PostScript 处理程序,同样包括了用于阅读的图形化界面和一系列命令行脚本。这一系列程序被包含在 TeXLive 发行版中。

因此本文提出一种可行的操作,是使用 DjVuLibre 中的 djvups 命令将 DjVu 文件转换为 PostScript 格式,然后使用 Ghostscript 中的 ps2pdf 将 PostScript 格式的文件重新转换为 PDF。这样我们几乎得到了高质量的 PDF 原稿。

命令行操作的伪代码如下

djvups [djvu-file-name] [ps-file-name] [-verbose] [-page='1,3,7-10'] [-..]
ps2pdf [ps-file-name] [pdf-file-name]

要注意的是,如果没有提前将可执行文件的目录添加到 Path 中,两条命令均需要替换为实际的文件路径;Windows 下 ps2pdf 是个 bat 脚本因此要注意把拓展名包含在内,因为有个不含拓展名的文件实际上是个 Bash 脚本。另外在 djvups 中,-verbose 可以显示一个简易的进度条,-page='1,3,7-10' 选择转换的页码,还有后续更详细的设置能调整 PostScript 的分辨率、颜色和灰度等。

文章完成后,经过提醒,我注意到在 superuser 上对于这一过程有一定程度的介绍,可供参考。

压缩 PDF 的体积

可惜的是文件体积膨胀的问题仍没得到很好的解决,甚至可以说远远超出我的想象。原本 37 MB 的 DjVu 文件转换为 PostScript 文件后有 7.7 GB 之大,再次转换为 PDF 之后也有 1.44 GB,体积非常可观。下一步,我们只能看看能否在合理范围内缩减体积,无论是从最后压缩 PDF 还是基于损失 PostScript 文件的前提之下。Adobe Acrobat 将其转换为压缩体积的 PDF 能将体积减小到 242 MB,略小于线上转换出的 343 MB,两者的实际效果相差不大。

如果想要进一步地缩小文件大小,只能尝试一种被称为 ClearScan 的操作,这种优化与压缩的方案在 Adobe 的产品博客上有较为详尽的比较和介绍。这种优化方案简单说就是讲文本部分进行 OCR 处理,并构建一套共享的字体,通过这套共享的字体来优化体积。在 Adobe Acrobat DC Pro 中,这种操作的名字略有变化,选项位置藏在「工具 – 优化扫描的页面 – 文本识别选项 – 编辑 – 输出 – 可编辑的文本和图像」,这可以说是 DjVu 思路的 PDF 压缩方案,把前景的内容和背景分离,效果可以说见仁见智,但总体而言对于原本高分辨率的原稿,效果还是可以接受的。在我的实验之下,最终效果是把前文所述的 343 MB 的文件压缩到 172 MB。但这种操作由于涉及 OCR 的操作,因此耗时比较恐怖,可以考虑睡前进行。

本文提供的方案只是一种可行的本地操作方案而已,多了一种选择,但实际操作上,只能说还是要在体积和质量上做艰难的取舍。

带着电子词典猜单词

现在挺多学校都在开设外教课,而我的小学大概是前几批之一。这些洋教师为了引起我们的兴趣简直绞尽脑汁,要做各种游戏来「激发学习热情」。而其中之一,就是「猜字谜」,所谓的「hangman」。

也许有人会喜欢做这些游戏吧,但这些游戏不但没有给我带来什么英语的学习兴趣,简直给我留下了巨大的童年心理阴影,可能也是我从小不喜欢玩游戏做游戏导致的吧。尤其是挨个教人来猜的时候,简直是变相的测验嘛,尤其对于我这种极其不擅长反向思考的人(我坚信我不是唯一的一个,要不怎么有那么多反向词典)!等到我真正开始对英语「有意识地不讨厌」,恐怕要是从用它认识那些外来的软件界面开始的,继而看电影啊电视剧啊,最后开始看书,当然这是后话了。

今天适逢广受赞誉的电子字典制造商物書堂制造的的广受称赞的柯林斯字典(Collins COBUILD Advanced Dictionary of American English)降价,下午就购买了一下。当时还没觉得有什么特别的地方,好像有非常丰富的搜索功能。晚上在洗澡的时候(所谓浴室奇思,shower thought)突然意识到这一回,终于能和猜单词游戏,做个彻底的了断了。

这个物書堂版本的柯林斯字典具有高级搜索功能,点击搜索框旁边的星号,奇妙的旅程开始了。开始我还以为是正则表达式,后来发现是某种特殊的通配符wildcard),还支持原音辅音什么的,在搜索单词上其实比正则表达式更有优势,只不过少了正则表达式连续多少个同类元素的功能,有点可惜,但也足够我们玩了。

不过这个功能还真就是是为了干这种脏活设计的,在对话框旁边有这样的一段注释:

The advanced search mode is particularly suited to crossword enthusiasts, though they will doubtless tickle the fancy of all word-lovers.

这里真想说,不只是「word-lover」受益,「word-hater」同样受益啊。

柯林斯字典高级搜索模式提示框
柯林斯字典高级搜索模式提示框告诉我们,该功能专为各路单词爱好者设计「The advanced search mode is particularly suited to crossword enthusiasts, though they will doubtless tickle the fancy of all word-lovers.」
柯林斯词典高级搜索模式测试,测试内容为题图「hangman」单词
柯林斯词典高级搜索模式测试,测试内容为题图「hangman」单词

只能说这么个字典应用实在是莫名奇妙地解决了儿时的心头大患,现在想想还真是激动不已,可能自己的心理阴影实在是太深重了吧。

相信随着年龄的增长,讨厌这类游戏(包括猜谜语、成语接龙之类)的绝不会只有我一个吧?绝对不该,我相信!