这个博客是用 Hugo 搭建的,有一些文章和未公开的草稿,我希望可以处理成 PDF 格式。 Hugo 自身并没这类功能。

我自己比较习惯 LaTeX 那套的输出样式,干净整齐。

如果是标准的 Markdown 文件,这个问题其实很简单的,利用 Pandoc 即可。

1
pandoc xxx.md -o xxx.pdf --pdf-engine=xelatex -V documentclass='ctexart' -V colorlinks=true

对于大部分的场景基本就够用了。

但是博客的情况是还有图片的引用问题。

为了一张图可以在多语言情况下用同样的路径引用,图片都是存储在 static/imgs 目录下的。 在文章引用图片的时候用的 imgs/xxx.webp 这样的格式。

所以如果直接处理已有的文章有两个问题:

  1. 图片的引用路径需要替换到本地的路径中。
  2. XeLaTeX 并不支持 WebP,还需要将处理好的 WebP 在加工成 PDF 时「还原」成 PNG/JPEG 等格式。

如果只是个别的几篇临时处理其实还好,但是这么操作几次后有点累。所以准备着手用 Pandoc Lua Filter 机制来实现。

我暂时不想将在用的这套「开源」出来,因为相关的代码只是针对我自己的情况做的处理。 还有很多情况没有兼容和处理过,也没有那个时间和精力,所以重点是分享思路。 开发时间上,用 Copilot 开发了大约五个小时(大部分都是在打磨细节和调试),工作量并不是很大。

整理好的 PRD 供参考(和当前的情况有些许出入) Markdown to PDF Generation Feature (Development Document)

目前的一些成品效果见: