macos terminal.app自ventura起支持导出带ansi颜色的矢量pdf,需启用“显示ansi颜色”、关闭“仅导出纯文本”,并勾选“preserve ansi colors”;iterm2提供更稳定的一键彩色pdf导出,支持完整缓冲区与svg级颜色保真。

Mac用户需要将当前终端窗口中所有带色彩的文本、命令输出和ANSI颜色样式完整保留为标准矢量PDF,用于技术归档或报告嵌入,不能只截取可视区域或丢失颜色信息。
用Terminal原生“导出”功能生成带色PDF
macOS Terminal.app自Ventura起支持直接导出含ANSI颜色的PDF,但必须先启用“显示ANSI颜色”并关闭“仅导出纯文本”选项,否则导出结果为黑白灰阶。
1、确保终端窗口已滚动到顶部,按 Command + Home 可快速归位(若未启用该快捷键,请先在终端偏好设置→键盘中勾选“使用Command+Home/End移动到开头/结尾”)。
2、点击菜单栏【Shell】→【Export Text As…】→ 选择【PDF】格式(不是“Export Selected Text As…”)。
3、在保存对话框中,确认勾选了【Preserve ANSI colors】复选框——【未勾选此项将导致所有彩色文字转为黑色】。
4、输入文件名,选择保存位置,点击“保存”。系统立即生成一个包含全部历史内容、精确还原256色ANSI调色板的矢量PDF,文字仍为可选中、可复制的TrueType文本。
用脚本命令批量导出当前会话为高保真PDF
当终端内容含大量实时日志、多行高亮或需跳过当前未渲染的缓冲区时,“Export Text As…”可能遗漏底部几行。此时需用底层命令强制捕获全缓冲区并渲染为PDF。
方法一:用tmux会话导出(适用于已启用tmux的用户)
1、按 Ctrl + b → [ 进入复制模式,再按 g 跳至缓冲区开头。
2、按 Space 开始选择,再按 G 选中全部内容,按 Enter 复制到剪贴板。
3、执行命令:pbpaste | sed 's/\x1b\[[0-9;]*m//g' | textutil -convert pdf -stdin -stdout > ~/Desktop/terminal-export.pdf——此命令会剥离ANSI码但保留结构,适合纯文档归档。
方法二:用script命令重录+wkhtmltopdf渲染(保留全部颜色与换行)
1、先运行 script -qec "cat" /dev/null 创建一个空会话快照;然后立即按 Control + D 退出,该操作会触发Terminal自动保存当前完整缓冲区到临时文件。
2、打开“访达”,前往 ~/Library/Saved Application State/com.apple.Terminal.savedState/,找到最新修改的 data.plist 文件。
3、用终端执行:plutil -convert xml1 ~/Library/Saved\ Application\ State/com.apple.Terminal.savedState/data.plist,再用 grep -A 500 "textData" ~/Library/Saved\ Application\ State/com.apple.Terminal.savedState/data.plist | sed '1d;$d' | base64 -d > /tmp/term-full.txt 提取出原始带ANSI码的文本流。
4、安装ansi2html:pip3 install ansi2html;再运行:ansi2html --bg=dark --scheme=builtin --title="Terminal Export" /tmp/term-full.txt | wkhtmltopdf - ~/Desktop/terminal-full.pdf——【wkhtmltopdf必须提前用brew install wkhtmltopdf安装,否则命令失败】。
用iTerm2替代方案实现一键彩色PDF导出
iTerm2比系统Terminal更可靠地支持ANSI颜色PDF导出,且无需手动复制粘贴,适合高频使用场景。
第一步:在iTerm2中打开目标会话,确保已启用“Preferences → Profiles → Colors → Minimum contrast ratio”设为1.0(避免深色背景被压暗)。
第二步:按 Command + Shift + E 呼出导出面板,选择【Export as PDF】,勾选【Include ANSI color codes】和【Include scrollback buffer】。
第三步:点击“Export”,指定路径后保存——生成的PDF中每个字符都映射为SVG











