Install
openclaw skills install @codermoray/md2pdf将 Markdown 文档渲染为排版精美的 PDF 文件。 管线:pandoc(MD→HTML)+ Playwright(HTML→PDF), 支持封面、目录、PDF 书签、页码和多主题。
openclaw skills install @codermoray/md2pdf将 Markdown 文件转换为排版精美的 PDF,不依赖 AI 语义理解。
当此 Skill 首次加载时,执行以下步骤:
python3 scripts/md2pdf.py --validate
输出示例:
=======================================================
md2pdf — 环境检测
语言环境: 🇨🇳 中文
=======================================================
✅ pandoc: pandoc 2.12
路径: /opt/homebrew/bin/pandoc
✅ 系统浏览器: Google Chrome 128.0.6613.137
路径: /Applications/Google Chrome.app/...
✅ Playwright: via /usr/bin/python3
路径: /usr/bin/python3
✅ Chromium: Playwright 内置 Chromium 就绪
🎨 可用主题: default, academic
🟢 环境就绪,可以转换。
如果环境检测失败,依次安装缺失组件:
缺失 pandoc: 运行 brew install pandoc
缺失 Playwright + Chromium:
pip install playwright && playwright install chromiumPLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/playwright \
pip install playwright && playwright install chromium
AI 应检测用户的语言环境(如
LANG=zh_CN),自动选择是否显示镜像源提示。
主动询问用户以下偏好,写入 output/user-config.json:
{
"theme": "default",
"font_size": 14,
"page_size": "A4",
"toc": true,
"cover": true,
"toc_depth": 4
}
如果用户跳过配置,使用上述默认值。
output/ 目录下output/ 中的文件不会被 git 跟踪(仅保留 .gitkeep)| 擅长 | 不擅长 |
|---|---|
| Markdown → PDF 转换 | 合并多个 MD 为单个 PDF |
| 封面页(从 front-matter 自动生成) | 从零创建 PDF(请先写 MD) |
| 交互式目录 + PDF 侧边栏书签 | 分栏布局 |
| 页码、多主题切换(default/academic) | 动态页眉页脚自定义 |
| 中文排版增强(--chinese-layout) | 加密/水印/签名 PDF |
| KaTeX 数学公式(pandoc --katex) | 复杂 LaTeX 数学环境 |
| Mermaid 图表(注入 mermaid.js 渲染) | 动态/交互式图表 |
| 智能分页(H1 另起页、代码块/表格保持完整) | — |
| 自定义字号和纸张大小 | 深度排版控制 |
| 环境自检(--validate) | — |
在 MD 文件头部使用 YAML 格式声明封面信息,所有字段均为可选:
---
title: "文档标题"
subtitle: "副标题(可选)"
author: "作者名"
date: "2026-06-26"
version: "1.4.0"
---
| 参数 | 是否必需 | 说明 |
|---|---|---|
--input <path> | ✅ | 输入 Markdown 文件路径 |
--output <path> | ❌ | 输出 PDF 路径,不指定则自动生成 |
--theme <name> | ❌ | 主题:default / academic,默认 default |
--chinese-layout | ❌ | 叠加中文排版增强(行距、缩进、禁则),配合任意主题 |
--cover / --no-cover | ❌ | 是否生成封面页,默认开启。无 front-matter 时自动用文件名 |
--toc / --no-toc | ❌ | 是否生成目录,默认开启 |
--toc-depth <n> | ❌ | 目录深度 1-6,默认 4 |
--font-size <px> | ❌ | 正文字号,默认 14px |
--font-family <name> | ❌ | 正文字体,覆盖主题默认字体 |
--page-size <format> | ❌ | A4 / A3 / letter / legal,默认 A4 |
--katex | ❌ | 启用 KaTeX 数学公式渲染 |
--mermaid | ❌ | 启用 Mermaid 图表渲染 |
--validate | ❌ | 环境检测模式,不执行转换 |
--list-themes | ❌ | 列出可用主题 |
确认用户提供的 Markdown 文件路径,确认是否需要封面、目录、主题、中文排版等。
主题和排版:
--theme default:苹果风格(默认)--theme academic:学术风格--chinese-layout:叠加中文排版增强(2倍行距、首行缩进、禁则处理),可配合任意主题封面行为(智能默认):
title 字段 → 以此为封面标题技术方案.md → 封面显示"技术方案")--no-cover如果用户想要更丰富的封面信息,指导其添加 front-matter:
---
title: "报告标题"
author: "作者"
date: "2026-06-26"
---
首次使用或环境变更后,先运行环境检测:
python3 scripts/md2pdf.py --validate
输出示例:
=======================================================
md2pdf — 环境检测
=======================================================
✅ pandoc: pandoc 2.12
路径: ...
✅ Playwright: Version 1.56.0
路径: ...
✅ Chromium: 就绪
🎨 可用主题: default, academic
🟢 环境就绪,可以转换。
环境不完整时:
brew install pandocpip install playwright && playwright install chromium# 基本用法(AI 拼装命令后执行)
python3 scripts/md2pdf.py --input /path/to/doc.md
# 切换主题 + 中文排版
python3 scripts/md2pdf.py --input doc.md --theme academic --chinese-layout
# 自定义封面/目录
python3 scripts/md2pdf.py --input doc.md --no-cover --toc-depth 2
# 自定义字号和纸张
python3 scripts/md2pdf.py --input doc.md --font-size 16 --page-size A3
# 无封面、无目录的简洁模式
python3 scripts/md2pdf.py --input doc.md --no-cover --no-toc
# 启用 KaTeX 数学公式
python3 scripts/md2pdf.py --input doc.md --katex
# 启用 Mermaid 图表
python3 scripts/md2pdf.py --input doc.md --mermaid
# 同时启用 KaTeX + Mermaid
python3 scripts/md2pdf.py --input doc.md --katex --mermaid
转换完成后确认:
管线: Markdown → 解析 front-matter → pandoc (--toc, --katex) →
注入封面 HTML → 注入 CSS 主题 → 注入 Mermaid.js(本地缓存)→
Playwright PDF (等待 Mermaid 渲染 → 输出)
↑ ↑
commonmark_x 解析 outline + 页脚模板
为什么这样设计:
| 特性 | 说明 |
|---|---|
| 📑 可点击目录页 | TOC 中的条目可点击跳转到对应章节 |
| 📌 侧边栏书签 | Playwright outline: true 生成 PDF 书签树 |
| 🔢 居中页码 | 每页底部自动显示页码 |
转换成功后输出:✅ 转换完成: /path/to/output.pdf (629 KB)
失败时输出错误信息到 stderr,退出码为 1。
| 条件 | 输出路径 |
|---|---|
用户指定了 --output | 以用户指定为准 |
未指定 --output,MD 文件在本项目外 | MD 同目录下同名 .pdf |
未指定 --output,MD 文件在技能目录内 | output/<文件名>.pdf |
| 问题 | 解决 |
|---|---|
| pandoc 未安装 | brew install pandoc |
| playwright 未安装 | pip install playwright && playwright install chromium |
| 中文显示为方块 | 确认系统有中文字体(macOS 自带 PingFang) |
| emoji 不显示 | 确认使用 --validate 检测到的环境正常 |
| 封面没显示 | 确认 MD 文件头部有 title: 字段;无 front-matter 时自动用文件名作为封面标题 |
| 目录为空 | 确认文档有 H1-H4 标题,或增加 --toc-depth 6 |
| 输出文件未生成 | 检查输出路径是否有写入权限 |