使用 Docker 封装 Python 小工具,生成 GitBook 的 PDF 轻松又高效
2023-10-31 12:32:05
如你所知,GitBook 新版本生成的 PDF 是通过调用 calibre 的 ebook-convert 模块进行电子书生成的,而它默认生成的 PDF 尺寸比较大,而且不支持压缩,非常不利于传播。经过简单的寻找,我看到 fuergaosi233 同学用 Python 基于 weasyprint 生成了 GitBook 的 PDF,效果还不错。因此,我也基于这个思路开发了一个 Python 小工具,并将其封装在 Docker 容器中,以便大家更方便的使用。
GitBook PDF 生成原理
想要生成 GitBook 的 PDF,本质上是要把 GitBook 的内容转换成 PDF 所需的格式,然后利用工具将其转换成 PDF 文件。而 GitBook 的内容主要以 Markdown 文件的形式存在,所以我们需要把 Markdown 文件转换成 PDF 所需的格式。
目前有两种主流的 Markdown 转 PDF 工具:calibre 的 ebook-convert 和 weasyprint。其中,ebook-convert 的生成速度较快,但生成的 PDF 尺寸较大;而 weasyprint 的生成速度较慢,但生成的 PDF 尺寸较小,并且支持压缩。
使用 Python 小工具生成 GitBook PDF
基于上述原理,我开发了一个 Python 小工具,可以把 GitBook 的 Markdown 文件转换成 PDF 所需的格式,然后利用 weasyprint 将其转换成 PDF 文件。
这个小工具的使用方法很简单,只需要将 GitBook 的仓库地址作为参数传递给小工具即可。小工具会自动克隆 GitBook 仓库,并将其中的 Markdown 文件转换成 PDF 所需的格式,然后利用 weasyprint 将其转换成 PDF 文件。
将 Python 小工具封装在 Docker 容器中
为了方便大家使用这个小工具,我将其封装在了 Docker 容器中。这样一来,大家只需要安装 Docker 即可使用这个小工具,而不需要安装 Python 和 weasyprint 等依赖项。
这个 Docker 容器的镜像名为 gitbook-pdf-generator
,可以在 Docker Hub 上找到。大家可以使用以下命令来拉取这个镜像:
docker pull gitbook-pdf-generator
拉取镜像后,就可以使用以下命令来运行这个容器:
docker run --rm -v /path/to/your/gitbook:/gitbook gitbook-pdf-generator
其中,/path/to/your/gitbook
是你的 GitBook 仓库的本地路径。
运行容器后,容器会自动克隆 GitBook 仓库,并将其中的 Markdown 文件转换成 PDF 所需的格式,然后利用 weasyprint 将其转换成 PDF 文件。生成的 PDF 文件会保存在 /gitbook/output
目录下。
结语
这个 Python 小工具和 Docker 容器可以帮助大家轻松生成 GitBook 的 PDF 文件。大家可以根据自己的需要来选择使用 Python 小工具还是 Docker 容器。
当然,这个小工具还有一些不足之处,比如不支持生成带目录的 PDF 文件。不过,我会在后续版本中逐步完善这些不足。
我希望这个小工具能给大家带来方便,欢迎大家提出宝贵意见和建议。