atom 中 markdown 导出 pdf 插件失效,因 markdown-pdf 等依赖已废弃的 phantomjs-prebuilt,与新版 electron 不兼容,导致报错、空白页或中文乱码;推荐用 marked + chrome 命令行链式转换,或 pandoc + xelatex 实现稳定导出。

Atom 里用插件导出 Markdown 为 PDF,现在基本走不通——markdown-pdf 和 markdown-themeable-pdf 都依赖已废弃的 phantomjs-prebuilt,在 Atom 1.70+(Electron 22+)环境下大概率报错、空白页或中文乱码。
为什么 markdown-pdf 插件点击 Convert 没反应或报错?
这个插件最后更新是 2018 年,核心依赖 phantomjs-prebuilt 已被官方弃用,且与新版 Electron ABI 不兼容。常见现象包括:
-
Error: ENOENT: no such file or directory, open '/home/xxx/.atom/styles.less'—— 插件硬编码读取旧版样式路径,新版 Atom 已移除该文件 -
AssertionError: html-pdf: Failed to load PhantomJS module—— 即使手动npm install phantomjs-prebuilt,也会因二进制不匹配而加载失败 - 导出 PDF 后全是白纸,或中文显示为方块 —— 渲染器未加载中文字体,CSS 也未生效
markdown-preview-plus 的 export-html 能用,但导出 PDF 还是断链
它能稳定把 .md 渲染成 HTML,但「导出 PDF」这步仍需外部工具配合,自身不提供 PDF 生成能力。关键限制有:
将 Markdown 格式的回复转换为适合 Telegram 的富文本,避免渲染错误。适用于用户偏好 Markdown 但目标平台为 Telegram 的场景。
- 必须先禁用 Atom 自带的
markdown-preview(Settings → Packages → 搜索并 Disable) - 执行
markdown-preview-plus:export-html前,光标必须落在 Markdown 编辑器内,不能在设置页或空标签页 - 导出路径含中文或空格时,部分版本会静默失败 —— 建议临时切到
/tmp/export.html这类纯英文路径 - 生成的 HTML 默认无打印适配,直接用 Chrome 打印 PDF 会带页眉页脚、边距过大;需加
--print-to-pdf-no-header参数压制
真正可用的替代方案:绕过插件,用命令行链式转换
不装任何 Atom 插件,5 秒搞定 HTML/PDF,兼容性与可控性都远超插件方案:
- 导出 HTML:
marked -o output.html input.md(marked是零配置、渲染快、支持 GitHub Flavored Markdown) - 导出 PDF(需已安装 Chrome):
marked -o /tmp/temp.html input.md && chrome --headless --disable-gpu --print-to-pdf=output.pdf --print-to-pdf-no-header /tmp/temp.html - 若需中文字体控制,在
.md文件顶部加:<style>body{font-family:"Noto Sans CJK SC", sans-serif;}</style>,marked会原样保留 - 如需更精细排版(目录、页眉页脚、章节编号),改用
pandoc + xelatex:pandoc input.md -o output.pdf --pdf-engine=xelatex -V mainfont="Noto Serif CJK SC"
最常被忽略的一点:所有“导出 PDF”都不是 Atom 自身能力,而是 Markdown → HTML → PDF 的多步转换。中间任意一环缺失(比如没装 Chrome、没配好 xelatex、路径含空格),整个流程就静默失败。别花时间调插件,直接用命令行链更省心。










