vscode 无法零依赖导出 pdf,所有稳定方案均需 chromium 或 pandoc+pdf-engine;markdown pdf(yzane) 因依赖废弃 phantomjs/旧 puppeteer 导致中文乱码、忽略 yaml 和相对路径图片,已停更且与新版 vscode 冲突。

VSCode 无法“零依赖”导出 PDF——所有稳定可用的导出方案都至少依赖一个外部组件:要么是 Chromium(Puppeteer),要么是 pandoc + pdf-engine(如 xelatex 或 wkhtmltopdf)。所谓“零依赖”插件(如旧版 Markdown PDF 声称的)在 2026 年已失效,实际运行时仍会静默下载或调用 Chromium,只是封装了路径逻辑而已。
为什么 Markdown PDF(yzane) 插件现在导出必乱码
它底层仍在尝试调用已废弃的 PhantomJS 或极老版本 Puppeteer,而这两者均不支持现代中文字体回退机制。即使你手动指定 executablePath,也会因缺少 @font-face fallback 导致标题/列表/代码块中的中文显示为方框。更隐蔽的问题是:它不解析 YAML front matter,所以无法按需切换主题或加载自定义 CSS;导出时自动忽略  中的相对路径,图片直接消失。
- 卸载
Markdown PDF(作者 yzane),它自 2025 年底起不再更新,且与 VSCode 1.85+ 冲突 - 不要相信“无需安装浏览器”的宣传——
Markdown Preview Enhanced第一次导出时会自动下载 Chromium(约 150MB),这是必须过程,不是 bug - 若终端执行
which chromium或which google-chrome无输出,说明系统未提供可用浏览器,此时Markdown Preview Enhanced会 fallback 到自带下载,但耗时更长
Markdown Preview Enhanced 导出 PDF 的硬性前提
它不是“点一下就出 PDF”,而是严格依赖三步链式触发:文件保存 → 预览打开 → 右键导出。任意一环断开,菜单项就不可见或静默失败。
- 文件必须已保存,后缀为
.md,且编辑器右上角无未保存标记(●) - 必须先按
Ctrl+Shift+V(Windows/Linux)或Cmd+Shift+V(macOS)打开预览窗口,不能直接在编辑器标签页右键 - 右键操作对象是预览窗口内的内容区域,不是编辑器侧边栏或文件资源管理器里的文件名
- 首次导出前,在文档顶部加 YAML front matter,例如:
---\ntheme: github\n---
,否则默认用white主题,PDF 无间距、无阴影、打印出来像扫描件
图床自动化:别用插件,用命令行 + 配置文件
VSCode 插件层面的图床(如 markdown-image-paste)在 2026 年普遍卡在权限和跨域问题上,上传失败不报错,只留空链接。真正可靠的是把图床逻辑下沉到 pandoc 或 shell 脚本里,配合 settings.json 的 markdown.extension.preview.imagePreview.lazyLoad 关闭懒加载,确保本地路径能被正确识别。
- 推荐方案:写一个
upload.sh(Linux/macOS)或upload.ps1(Windows),用curl或Invoke-RestMethod上传图片,返回 URL 后自动替换当前文档中匹配的 - 在 VSCode 设置中启用
"markdown.preview.breakOnSingleNewLine": true,避免换行被忽略导致图片路径解析错位 - 不要依赖插件自动生成图床链接——它们通常把
./assets/错解析成file:///协议,浏览器预览正常,但导出 PDF 时彻底丢失
真正麻烦的不是选哪个插件,而是理解每一步背后调用了什么二进制、读取了哪些路径、是否联网下载了 Chromium 子进程。很多“一键导出”失败,其实卡在系统 PATH 没有 Chrome、或是 macOS 上 Gatekeeper 拦截了自动下载的 Chromium.app,却没有任何提示弹出——得去 VSCode 的开发者工具 Console 里翻 stderr 才能看到 Failed to launch chrome。











