重新发现reveal.js幻灯片转PDF之旅

从Org-mode到reveal.js的幻灯片制作之路

几年前,我开始使用Emacs Org-mode配合reveal.js来生成培训用的幻灯片,结果相当令人满意。坦白说,是Carsten带我入坑的。起初我花了一些时间调整设置,直到完全符合心意。之后,只需在命令行输入make,就能从.org文件自动生成HTML文件——这全靠我自己写的Makefile。生成的*.html文件直接通过浏览器打开演示即可。

PDF输出的痛点与手动折腾

但到了打印讲义或发手稿时,我需要PDF格式。过去尝试过一些转换工具,效果都不理想——要么生成效果差强人意,要么无法像手动操作那样完美。我的手动做法是:在浏览器中打开幻灯片URL,加上?print-pdf参数,然后通过打印功能另存为PDF。虽然结果靠谱,但每次都要重复这套手动流程,实在麻烦。

自动化探索:重拾decktape

我一直想把这个过程自动化。几天前,我重新想起了decktape这个工具。坦白讲,我对安装NPM包有些抵触——它和Maven、Rust一样,动辄要下载半个互联网。所以我先从Docker镜像入手,按照项目文档部署。然而,生成的效果让我不太满意:字体看起来很奇怪,整体印象与预期相差甚远。说“奇怪”可能不太准确,但就是感觉不对劲。

后来我恍然大悟:Docker镜像里运行的是Linux版Chrome,而我平时在Mac上用惯了自带的字体和渲染效果。于是我在本地安装decktape(通过NPM),生成的PDF果然与手动操作一模一样,完美!

自动化脚本:runoff.sh

为了实现全自动流程,我写了一个叫runoff.sh的小脚本(没错,名字是故意起的:-)。它的工作流程如下:

  • 启动一个Python内置HTTP服务器,绑定在127.0.0.1:8108上(端口可调);
  • 记录该HTTP服务器的进程ID;
  • 运行decktape,指定参数(尺寸998×780,作者、标题、主题等);
  • 最后在脚本退出或出错时自动杀死HTTP服务器。

这个脚本基本满足了我的需求:一键生成与手动操作效果一致的PDF。但还有两个小遗憾:

  • 生成的幻灯片页面上没有页码——之前有学员提到过这个问题,希望加上;
  • 我还在寻找一个好用的2nup(两页合并为一页)打印程序。Ghostscript之前用得很好,但后来因为某些原因无法继续使用(具体原因我忘了)。目前用pdf2ps | psnup组合可以实现,但输出质量不如原版,而且URL链接会损坏。

尽管如此,这套自动化流程已经大大节省了时间。对于经常做培训、需要PDF讲义的Mac用户来说,本地安装decktape配合简单脚本,绝对是个值得尝试的方案。


关注微信号:智享开源 ,及时了解更新信息。

原文链接:https://jpmens.net/2026/07/11/rediscovering-reveal-js-to-pdf/

评论列表

发表评论

你必须 登录 才能发表评论.

为您推荐


请支持IMCN发展!

谁在捐赠

微信捐赠 支付宝捐赠
微信捐赠 支付宝捐赠
ta的个人站点

发表文章4448篇

关注我的头条 不要放弃,百折不挠,坚强、自信。


扫码关注公众号:智享开源

最新科技信息


归档

近期评论