惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
博客园_首页
C
Check Point Blog
小众软件
小众软件
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
Engineering at Meta
Engineering at Meta
美团技术团队
Martin Fowler
Martin Fowler
Vercel News
Vercel News
D
Docker
罗磊的独立博客
B
Blog RSS Feed
The Cloudflare Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
雷峰网
雷峰网
博客园 - Franky

暗无天日

读:AI Agent 安全日志——从可见性与隐私的两难说起 - 暗无天日 AI写作的语言指纹——如何让文字不那么像机器 - 暗无天日 读:50 条 Claude Code 技巧——一个工程经理的六个月使用心得 读:AI 辅助开发为什么让 E2E 测试更有价值 - 暗无天日 读:在Emacs中使用Claude Code(Spacemacs适配版) - 暗无天日 Claude Code 背后的工程哲学——读 Agent Harness Engineering 读:Agent Harness Engineering——AI 智能体不只是模型,还有套件 - 暗无天日 browser-harness:让 AI 直接接管你的浏览器 - 暗无天日 读:Security-First CI/CD —— DevSecOps 自动化实践指南 TIL: 数字小键盘的小数点陷阱与行内算术求值 - 暗无天日 读:Immutability 不是万能药,它是一种权衡 - 暗无天日 Conducty:给 Claude Code 加上项目记忆和并行执行能力 - 暗无天日 读 — GitHub Trending 里的 Claude Code 技能包 读 — Prompt Caching 省钱指南 TIL: Emacs 中那些跟鼠标配合的冷门快捷键 - 暗无天日 读:Anvil——把 Emacs 变成 AI 的工具服务器 读:Emacs 代码折叠终极指南 - 暗无天日 读:Clojure 搭车客指南 - 暗无天日 git推送失败后恢复仓库损坏的完整记录 - 暗无天日 多智能体系统的两个有效模式——以及对 Claude Code 用户的启示 - 暗无天日 用 Org Babel 写 Literate 博文:扩展执行 + 定制导出 proced:Emacs 内置的进程查看器 - 暗无天日 从 proced 定制中学到的 Elisp 模式 读:让 Emacs proced 在 macOS 上显示 CPU 和内存 异步编程的函数着色税 - 暗无天日 链式调用的代价:JavaScript 和 Clojure 的共同教训 - 暗无天日 hyperfine:命令行基准测试工具 - 暗无天日 管道中的变量去哪了?——子 shell 作用域陷阱 - 暗无天日 开源包装器的信任陷阱:四个危险信号 - 暗无天日 程序员愿意为 AI 写文档,却不愿为同事写 - 暗无天日
TIL: 把 Emacs Buffer 打印成图片
2026-05-18 · via 暗无天日

想把 Emacs buffer 的内容变成一张 PNG 图片——分享代码片段、做文档插图、存档都挺方便。试下来有两条路,各有取舍。

路线一:cups-pdf 虚拟打印机(推荐,中文友好)

思路是装一个虚拟 PDF 打印机,Emacs 往这个"打印机"输出,实际得到 PDF 文件,再把 PDF 转成图片。走系统 fontconfig 渲染字体,中文开箱即用。

安装并启动

sudo pacman -S cups-pdf   
sudo systemctl start cups

创建打印机队列

Arch 上装完 cups-pdf不会 自动创建打印机队列,需要手动添加:

lpadmin -p PDF -E -v cups-pdf:/ -m CUPS-PDF_noopt.ppd

执行后用 lpstat -p PDF 确认打印机状态为"空闲"。

修改输出目录

默认输出到 /var/spool/cups-pdf/${USER}/ ,改成 ~/PDF/ 方便找:

sudoedit /etc/cups/cups-pdf.conf

把:

#Out /var/spool/cups-pdf/${USER}

改成:

Out /home/${USER}/PDF

改完立即生效,不用重启 CUPS 。

配置 Emacs

(setq printer-name "PDF")

加到配置文件里,或者只在当前会话中 eval 也行。

打印并转图

在目标 buffer 里执行 M-x print-buffer ,PDF 会出现在 ~/PDF/ 目录下。然后终端里转换:

pdftoppm -png -r 300 ~/PDF/output.pdf ~/buffer-image

-r 300 是 DPI,数值越大图片越清晰。输出文件名会自动加页码后缀,比如 buffer-image-1.png

pdftoppm 来自 poppler 包,Arch 上默认就有。
转换时会输出大量 "Bad bounding box in Type 3 glyph" 警告,这是 CJK 字体的 Type 3 字形边界不精确导致的,不影响渲染结果,可以无视。

路线二:ps-print(保留语法高亮)

上面那条路输出的是纯文本,没有颜色。想要语法高亮,得用 Emacs 内置的 ps-print

基本用法(纯英文)

然后转 PNG :

gs -q -dNOPAUSE -dBATCH -sDEVICE=png256 -r300 -sOutputFile=output.png /tmp/output.ps

有中文的情况

ps-print 自己生成 PostScript ,不调用系统字体。没有配置 CJK 支持的话,遇到中文字符会生成 ^B ( ASCII 0x02 )占位符,最终渲染出来就是空白。

需要加载 ps-mule 模块并指定中文字体:

(require 'ps-mule)
(setq ps-multibyte-buffer 'non-latin-printer)
(setq ps-mule-font-info-database
      '((chinese-gbk
         (nil . "Noto Sans CJK SC")
         nil 1 1 1 1 nil)))

你可能会问:文件明明是 UTF-8 编码,为什么不是 unicode ?这里有个容易混淆的概念—— 编码(encoding)字符集(charset) 是两回事。UTF-8 是编码方式,决定字节怎么存;charset 是字符分类,决定字符属于哪个集合。 ps-mule 按 charset 分组查找字体,不按编码。现代 Emacs 中,即使文件是 UTF-8 编码的,中文简体字符依然归类在 chinese-gbk 这个 charset 下。可以在 Emacs 里验证:光标放在中文字上, M-x describe-char ,看 charset 那一行的值。

配置好之后,同样的操作: C-u M-x ps-print-buffer → 转换 PS → 得到带高亮和中文的 PNG 。

字体要确认系统上装了 noto-fonts-cjk

pacman -Q noto-fonts-cjk

两条路线怎么选

  cups-pdf ps-print
中文支持 开箱即用 需配 ps-mule 字体
语法高亮
依赖 cups-pdf 、 poppler Ghostscript
自定义排版 多(行号、页眉、字体大小等)

简单记:*要中文选 cups-pdf ,要高亮选 ps-print* 。

ps-print 的排版选项可以通过 M-x customize-group RET ps-print 精细调整,包括页眉内容、行号显示、字体大小等。