首选Markdown Preview Enhanced(MPE)而非markdown-pdf,因其调用puppeteer截取真实预览DOM快照,可完整保留MathJax公式SVG渲染、Mermaid图表、JS动态样式及中文字体;而markdown-pdf基于已停更的wkhtmltopdf,不执行JS,导致公式变源码、图表空白、代码无高亮、中文显示方框。

VSCode 原生不支持导出 PDF,所谓“配置环境”本质是选对工具链 + 避开静默失败点。目前真正稳定、能处理中文、公式、Mermaid 的只有 Markdown Preview Enhanced(MPE)配 puppeteer 或 pandoc 两条路径——其他插件如 markdown-pdf(yzane)已停止维护,导出常丢内容、糊字体、不执行 JS。
为什么首选 Markdown Preview Enhanced 而不是 markdown-pdf
markdown-pdf 插件底层用 wkhtmltopdf 渲染,它不执行 JavaScript,导致以下内容直接消失或失效:
-
$$数学公式只显示原始 LaTeX 字符串,不渲染 -
```mermaid图表变成文字描述或空白 - 代码块高亮依赖
highlight.js动态注入,导出后无颜色 - 中文 fallback 缺失时显示方框,且无法通过 CSS 修复(JS 不运行,
@font-face不生效)
Markdown Preview Enhanced 则调用 puppeteer 截取真实预览页 DOM 快照,所有 JS 渲染结果(包括 SVG 公式、Mermaid 图、动态样式)都会保留。
必须完成的三步初始化操作
安装插件只是起点,以下三项缺一不可,否则导出静默失败或生成空白 PDF:
- 先用快捷键
Ctrl+K V(Windows/Linux)或Cmd+K V(macOS)唤出 MPE 自带的预览窗——不能只靠 VS Code 原生Ctrl+Shift+V,后者不支持 Mermaid 和公式 - 确认预览窗口里已正确显示 Mermaid 图、$$ 公式转为清晰 SVG、代码块有语法色;若未加载成功,导出必为空
- 首次导出会自动下载 Chromium(约 150MB),需联网且等待数秒;若被杀毒软件拦截(Windows)或系统阻止(macOS 弹出“开发者无法验证”),需手动去「系统设置 → 隐私与安全性」点击“仍要打开”
中文字体和样式必须写进 YAML front matter
MPE 不会自动加载同目录下的 CSS,必须显式声明。在 Markdown 文件顶部加:
将PDF文件(含扫描件、图片)转换为Markdown格式。接入MinerU和PaddleOCR双引擎,支持扫描件OCR识别、公式表格解析、多语言识别。兼容本地OCR识别。
--- stylesheet: ./style.css ---
并在同级目录放 style.css,内容至少包含:
body {
font-family: "Noto Sans CJK SC", "PingFang SC", "Microsoft YaHei", sans-serif;
}
@font-face {
font-family: 'pdf-font';
src: local("Noto Sans CJK SC"), local("PingFang SC"), local("Microsoft YaHei");
}
@page {
margin: 2cm;
}
注意:./style.css 中的 ./ 不能省;CSS 里关键规则建议加 !important(如 h1 { font-size: 28px !important; }),否则可能被内置样式覆盖。
导出失败时优先检查这三处
报错信息常被隐藏,实际卡点往往很具体:
- 导出后 PDF 是空白页?大概率文档含非法 HTML(如未闭合 )或 MathJax 语法错误(混用中文括号、漏反斜杠),可临时删掉公式块再试
- 右键菜单没有
Export to PDF?说明预览窗不是 MPE 启动的——确认你没装Markdown All in One或其他插件抢注了Ctrl+Shift+V;卸载冲突插件或改用Ctrl+K V- 提示
Puppeteer not found或Failed to launch chrome?不是 Chrome 没装,而是 MPE 自带的 Puppeteer 版本太老;需全局安装:npm install -g puppeteer,再在 VS Code 设置中填入markdown-preview-enhanced.puppeteerPath(如/usr/local/lib/node_modules/puppeteer/.local-chromium/)最易忽略的是:导出依赖预览页真实渲染状态,而不是文件内容本身——哪怕 Markdown 写得再规范,只要预览没跑起来,PDF 就是空的。
- 右键菜单没有










