Sublime Text 无一键导出 PDF 功能,需经 HTML 中转或命令行工具;ExportHtml + Chrome 打印最稳定,可保留配色、行号等;字体问题需手动修改 font-family 并确保中文字体可用。

Sublime Text没有一键导出 PDF 的功能,所有“导出代码为 PDF”的操作都必须经过 HTML 中转或调用外部命令行工具;所谓“美观”,实际取决于你控制 HTML 样式、字体、行号和打印参数的能力,而不是插件开关。
用 ExportHtml + Chrome 打印是最稳的路径
这是目前兼容性最好、效果最可控的方式,能保留 Sublime 当前配色方案、行号、缩进和折叠状态,且不依赖额外安装大型工具链。
- 通过 Package Control 安装
ExportHtml(注意不是ExportHtml2或已弃更版本) - 打开代码文件 →
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS)→ 输入ExportHtml: Export→ 回车 - 弹出配置面板时:勾选
Include line numbers(如需行号),开启full_page(否则只输出代码块,无样式),关闭wrap_lines(避免语义错行) - 生成的
.html文件默认用内联 CSS,用 Chrome 打开 →Ctrl+P→ 选择「另存为 PDF」 - 打印设置里必须:关闭页眉页脚、勾选「Background graphics」、缩放设为 100%(别选 Fit/Shrink)
中文糊、字体虚?问题在 HTML 的 font-family
ExportHtml 默认用 Consolas, 'Liberation Mono', Menlo, monospace,这些不含中文字体,导致中文 fallback 到系统默认(常是模糊的点阵或小字号)。
- 导出后用文本编辑器打开生成的
.html文件 - 搜索
font-family:,将其改为:font-family: 'Fira Code', 'SFMono-Regular', 'Consolas', 'Microsoft YaHei', 'STHeiti', sans-serif; - 若仍发虚,Chrome 打印时关掉
Background graphics(部分字体抗锯齿依赖该选项) - macOS 用户确保已安装
STHeiti或Noto Sans CJK SC;Windows 用户确认Microsoft YaHei存在(Win10/11 默认自带)
pygmentize + wkhtmltopdf 适合批量或 CI 场景
绕过浏览器,命令行直出,可脚本化,但会丢失 Sublime 特有高亮(如括号匹配、自定义 scope 着色),且需手动配字体路径和样式映射。
- 先装依赖:
pip install Pygments,再装wkhtmltopdf(macOS:brew install wkhtmltopdf;Windows:下载安装包并加到PATH) - 基础命令:
pygmentize -O full,style=monokai,linenos=inline,font_size=12pt -f html -o out.html main.py && wkhtmltopdf --enable-local-file-access out.html out.pdf -
--enable-local-file-access是关键,否则@font-face加载失败,中文字体不生效 -
style=monokai并不等于 Sublime 的 Monokai 主题,建议对照测试vs、github-dark等更通用风格 - 长代码溢出?加 CSS:
pre { white-space: pre-wrap; }到 HTML 的块中
别碰那些标着“一键 PDF”的插件
像 SublimePDF、Print to PDF 这类插件,底层调用 wkhtmltopdf 或 window.print(),但几乎不处理字体嵌入、CSS 变量兼容、深色主题反色等真实问题。
- 常见报错:
Command not found: wkhtmltopdf(没装或 PATH 错)、Failed to launch browser(Chrome 被策略禁用静默打印) - 导出后颜色变灰?因为插件没读取你的
.sublime-color-scheme,而是硬编码了一套浅色 CSS - macOS 上静默失败不报错?
wkhtmltopdf在 macOS 13+ 需要手动授权“完全磁盘访问”,否则连临时 HTML 都打不开 - 导出 PDF 模糊?本质是浏览器渲染分辨率低 + 缩放压缩双重失真,不是插件能修的
真正决定 PDF “美观”程度的,从来不是 Sublime 本身,而是你在 HTML 层手动补的那几行 font-family、white-space 和打印时按住不放的 Background graphics 开关。











