Posted in: Mobile/iOS, PC/macOS, Study

自己根据扫描 PDF 文件制作 EPUB 电子书

相关文章

虽然 Z-Library 上已经有很多 EPUB 格式的电子书了,可是也有不少书只有 PDF 扫描版本,缺点不少:体积偏大、标注不方便、无夜间模式、文本查询和搜索不方便等。如果能把这些 PDF 图书转换成 EPUB 格式该有多好啊!可惜目前并没有简单有效的方法。

我想转换的几本图书

主题是清朝历史。作者都是辽宁师范大学的喻大华。虽然说这个喻老师本质上还是属于体制内既得利益者,书里也说了一些共产党的好话,但这几本书的内容还是比较吸引我的。

小时候看古装剧时发现人们的衣食住行和我们非常不同,于是就有这么个疑问:古代是怎么过渡到现代的?节点自然就是最后一个朝代——清朝。可惜历史书上一讲到清朝就断代,康熙乾隆是一副古代盛世的模样,然后马上就是鸦片战争——穿着奇装异服的英军端着大炮打过来了。然后突然长相很像现代人的孙中山就出来了。感觉太跳跃了,没有一个过渡时期。

喻老师的这几本图书从乾隆中期的嘉庆出生开始(《还珠格格》大家都熟悉吧?就是这个时期),一直写到文化大革命时期溥仪去世,除了同治年间(1862 – 1874)少数几件大事(例如杨乃武与小白菜案、太平天国灭亡事件)略去之外,基本覆盖了中国古代过渡到现代这 200 年历史。这个 GAP 补上了。

这几本书如下:

  1. 嘉庆皇帝(2009年出版,ISBN = 9787020076758)
  2. 道光皇帝(2009年,ISBN = 9787535436429)
  3. 咸丰皇帝(2010年,ISBN = 9787802196605)
  4. 囚徒天子光绪皇帝(2011年,ISBN = 9787100086431)
  5. 末代皇帝溥仪(2011年,ISBN = 9787802197671)

起初是在《百家讲坛》视频上看到喻老师的的讲解。后来发现的图书,内容比《百家讲坛》视频更丰富。我第一次看是在2015年左右,因此这几本书看的都是第一版,第二版没看。

截至本文撰写时,Z-Library 上有《道光皇帝》第一版的 EPUB 版本。其他四本图书则只有扫描 PDF 版(《溥仪》是第一版,另外三本均为第二版)。个人感觉第二版明显没有第一版好,因为第一版里面有很多精彩的照片,第二版全部换成了手工绘图,两章才有 1 幅绘图,没啥意思。

步骤

OCR

这一步其实最难,目前并没有找到很好的中文 OCR 工具。我使用 macOS 系统自带的 OCR,虽然大部分文字能复制出来,但是很多形近字会出错。例如:

  • 进人(应该是“进入”)
  • 天折(应该是“夭折”)
  • 毕竞(应该是“毕竟”)

尝试过一些自动化工具,感觉效果不理想。看看今年秋季新发布的带 AI 的 macOS 是否会有改善。

编写 markdown 文件

git clone https://github.com/phodal/ebook-boilerplate.git
cd chapters

然后在 chapters 目录里面建立 .md 文件,每章一个文件,文件名随意。文件里面粘贴 OCR 的内容。后面编译时会自动识别 .md 文件中的一级标题和二级标题,并以此建立 EPUB 的目录。

上面提到 OCR 会出现形近字的错误。而且相同的错误词语会出现多次。所以可以利用 sed 命令做一次性替换。例如把所有的“天折”修改成“夭折”

find . -path "*/chapters/*.md" -exec sed -i '' 's/天折/夭折/g' {} +

设置 CSS

git clone 下来的根目录里有 style.css 文件,在这里可以设置自己喜欢的 CSS 样式。

/* 去掉列表前面的1、2、3、4等编号。这个很重要,否则自动生成的目录上带着1、2、3、4等,不好看 */
ol {
  list-style-type: none;
}

/* 下面这些可有可无 */
/* 给标题下面增加虚线的分割线 */
h1, h2 {
  border-bottom: 1px dashed #4f5051;
}

/* 普通段落的样式。中文一般都会开头空两格 */
p {
  line-height: 150%;
  text-indent: 2em;
  font-family: sans-serif;
}

/* 引用的样式,对应 markdown 里面的 > 后面的内容 */
blockquote {
  border-left: 0.3rem solid #1abc9c;
  margin-left: 0;
  margin-right: 0;
  font-size: 80%;
}
blockquote p {
  font-family: 'STKaiti', 'Kaiti', serif;
}

效果图如下:

设置封面

封面图片直接用 PDF 的封面图片即可,文件名改成 cover.jpg,放入 img 目录下面即可。

编译

首先如果是 macOS 系统,要修改一下 init.sh 文件,改成这样:

sed -i '' "s/Phodal Huang/$author/g" "build/author.html" "build/metadata.xml" "build/title.txt" "Makefile"
sed -i '' "s/电子书模板/$bookname/g" "build/author.html" "build/metadata.xml" "build/title.txt" "Makefile"

即在 -i 后面要加上空字符 ''。因为 macOS 里面的 sed 和 Linux 不一样。

然后再修改一下 Makefile 文件,因为作者提供的 Makefile 没有给 EPUB 添加 CSS。我们自己加进去。

epub: markdown
	pandoc -s $(filename).md -t epub -o $(filename).epub -c style.css \
		--epub-metadata $(include_dir)/metadata.xml \
		--epub-cover-image img/cover.jpg \
		--title-prefix $(title) \
		--toc

然后安装好 pandoc,就可以通过 make epub 运行了。运行结束之后,在当前目前下面会生成 ebook.epub 文件,就可以加载在 Apple Books 里面看了。

上传到 Z-Library

ebook.epub 文件拖过去,然后填入 ISBN 号,系统会自动补充元数据。提交之后会被审核几个小时,审核通过之后即可公开。

目前已上传完成(注意前面的主域名 zh.singlelogin.re 可能会失效,需要去 Z-Library 官方推特上找新的域名)的图书如下,会慢慢更新:

不同设备之间阅读进度无法同步的问题

Apple Books 的优点除了省电之外,就是不同设备之间可以同步阅读进度和书签、注记等。可是我做的这几个 EPUB 却出现了如下的 bug:

  1. 书签、注记不能同步。
  2. 阅读进度显示有大 bug:iOS 上显示的是 macOS 上的阅读进度,无论 iOS 上本身阅读到百分之多少,首页的进度始终不更新。 macOS 上的阅读进度倒是正常的。

这原因主要在于:我们一般操作都是在 macOS 上双击打开 EPUB 文件,让 Apple Books 加载 EPUB 图书,然后该图书就同步到了 iOS 上。这时就会产生 bug。一个解决方案如下:

  1. 删除出现 bug 的图书(选择在所有设备里都删除)。
  2. 在 macOS 上,把 EPUB 文件上传到 iCloud 任意一个文件夹。
  3. 在 iOS 上,从 iCloud 中下载这个 EPUB 文件,打开。
  4. 在 iOS 上开始阅读,此时 macOS 上也会出现这个图书,可以下载。过几秒钟后,进度会显示一致。
  5. (不太确定)在 iOS 上不要设置该图书“阅读完毕”,否则进度同步功能又会出现故障。

这个解决方案原先来自如下的 Reddit 贴文,只不过他用的是 Google Drive,我直接换成了 iCloud。

Comment
byu/archimedes1010 from discussion
inapplehelp

看书比刷抖音有意思的多。

Comments (12) on "自己根据扫描 PDF 文件制作 EPUB 电子书"

        1. Safari 17.5 Mac OS X  10.15.7

          意思就是用 macOS 自带的“预览”打开扫描的图片或者 PDF,就可以直接把里面的文字复制下来。这个功能叫做 LiveText,需要 macOS Monterey 系统以上,如果是 Apple Silicon 芯片的 mac,效率会更高一些。

  1. Google Chrome 119.0.0.0 Windows 10 x64 Edition

    也可以用【白描】+【sigil】,适合小说散文哲学文学之类基本是纯文本的书,复杂点的带公式、图片、表格的话,用啥方法都费事,得手动修

    1、PDF整理质量可以就直接用,不太行的话用CEP处理一下,把页眉页脚页码啥的全部裁掉,只保留正文部分。
    2、用【白描】进行OCR,个人感觉准确率还挺高的,简体繁体都不错,只要书不是很糊,很少有错字,偶尔一两个也不会影响阅读。
    3、OCR完还可以人工校对一下,【白描】自己是一边图片一边文字,两边都可以滚动,快速过一遍,修理一下空行,可以直接合并所有页面并导出txt格式。
    3、把txt扔进sigil就行了。
    4、CSS想加了再改一遍,不加也不太影响,把章节名弄一下就够。

      1. Google Chrome 119.0.0.0 Windows 10 x64 Edition

        感觉也还好,比Calibre强,我没有编程基础,所以觉得这种软件比敲代码好学

  2. Google Chrome 125.0.0.0 Mac OS X  10.15.7

    古代是怎么过渡到现代的? 😆

    现在能静下心来看书越来越难了,手机像鸦片一样把我的所有空闲事件抽的干干净净

发表回复

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