banner
绘素

绘素的Blog

twitter
github
email

使用 honkit 将 Markdown 文件转换成 pdf/epub 电子书

起因#

在 Github 上有许多电子书是以 Markdown 文件形式编写的,它们通常是由若干个文件夹包括若干个 md 文件构成的。这种 Repo 可以使用 GitBook 构建成网页,可供在线浏览。我想将这些文件转换成 epub 格式并导入到自己的阅读器中阅读,以便更方便地管理注释。

在网页上查询后发现 gitbook 有命令行版本,可以生成 html/pdf/epub。下载之后发现初始化的时候会报错:

Installing GitBook 3.2.3
/opt/homebrew/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:287
      if (cb) cb.apply(this, arguments)
                 ^

TypeError: cb.apply is not a function
    at /opt/homebrew/lib/node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js:287:18
    at FSReqCallback.oncomplete (node:fs:192:5)

Node.js v19.7.0

查了一下报错,发现是 gitbook 命令行的依赖版本太老了,而且 gitbook 命令行已经不再开发更新。在 Stack Overflow 上发现有人推荐了 honkit,一个 gitbook 的 fork。

流程#

安装 honkit#

在使用 honkit 之前,需要先安装 Node.js。

安装 honkit:

$ npm init --yes
$ npm install honkit --save-dev

安装 Calibre#

下载 Calibre 并安装。

Windows 下需要将 Calibre 安装路径添加到环境变量。

Mac 下需要使用如下命令:

$ sudo ln -s /Applications/calibre.app/Contents/MacOS/ebook-convert /usr/local/bin

转换:#

在文件夹内初始化:

$ npx honkit init

会生成如下形式的文件结构:

.
├── files
├── README.md
└── SUMMARY.md

其中,README.md 文件包含书籍的前言或介绍信息,SUMMARY.md 文件则包含书籍的内容目录。

接下来,可以根据书籍的内容编写目录。假设该书的内容结构如下:

.
├── ch1
│   ├── ch1.1.md
│   └── ch1.2.md
└── ch2
    └── ch2.1.md

SUMMARY.md的内容应该是

# Summary

### ch1

* [ch1](ch1/ch1.1.md)
* [ch1](ch1/ch1.2.md)

### ch2

* [ch2](ch2/ch2.1.md)

如果书籍内容较多,可以使用 ChatGPT 来加速目录文件的构建。使用 tree 命令获取文件结构,将目录要求和文件结构发送给 ChatGPT,就可以生成目录文件了。

如果需要自定义书籍元信息,需要在当前文件夹下新建 book.json 文件。

以下是一个示例:

{
	"root": "./",
	"title": "xxx",
	"author": "xxx"
}

更多自定义选项可以参考官方文档

在我的经验中,如果在元数据中使用中文可能会出现一些问题。因此,我建议使用默认设置生成电子书,并将电子书导入到 Calibre 中编辑元数据。编辑完成后,转换书籍即可应用元数据。这样更为直观和简单。

如果想要添加封面,可以在目录下添加 cover.jpg 文件。

设置完成后,即可构建电子书。命令如下:

$ npx honkit build
$ npx honkit pdf
$ npx honkit epub

这样可以生成 html/pdf/epub 文件了。

Docker 使用#

我更推荐直接使用 Docker 版本,更加方便,只需在目录下执行命令即可。

docker pull honkit/honkit
docker run -v `pwd`:`pwd` -w `pwd` --rm -it honkit/honkit honkit build
docker run -v `pwd`:`pwd` -w `pwd` --rm -it honkit/honkit honkit pdf
docker run -v `pwd`:`pwd` -w `pwd` --rm -it honkit/honkit honkit epub

其他#

这个方法也可以用来把一些网页专栏制作成 epub 电子书。流程是先用 简悦 将网页转换成 Markdown 文件并保存,然后再用 Honkit 将其转换成 epub,这样就可以导入到 Apple Books/Readwise Reader 等阅读器中查看并管理标注。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。