# Markdown 导出 [中文](./README.zh.md) · [English](./README.md) 一个 DeepSeek Harness 插件,在 Markdown 文档预览的工具栏里加入 **「导出」** 按钮。不用离开应用,就能把当前打开的 Markdown 文件导出为自包含的 HTML 文件或 PDF。 ## 功能 - **导出 → HTML 文档**:下载单个 `.html` 文件,样式内联、本地图片以 data URI 内嵌,离线可用,可直接发给别人。 - **导出 → PDF 文档**:在同一份 HTML 上打开系统打印对话框,选择 PDF 打印机或「另存为 PDF」即可。 - **仅对 Markdown 生效**:按钮只出现在 `.md` / `.markdown` 文件的预览工具栏中。 - **读取与预览同源**:通过 Harness 的 `workspaceFiles` Remote 读取源文件,导出的永远是 Host 上的最新内容。 - **中英双语**:界面文案跟随应用语言自动切换中文或英文。 ## 支持的 Markdown 语法 | 分类 | 语法 | | --- | --- | | 标题 | ATX(`#`)与 Setext(`===` / `---`),自动生成锚点 id | | 强调 | `**粗体**`、`*斜体*`、`***加粗斜体***`、`~~删除线~~`、`` `行内代码` `` | | 块级 | 段落、硬换行、分隔线、引用(支持嵌套) | | 列表 | 有序 / 无序、嵌套、任务列表(`- [x]`)、紧凑与松散列表 | | 代码 | 带语言标签的围栏代码块、缩进代码块 | | 表格 | GFM 表格,支持 `:---`、`:---:`、`---:` 对齐 | | 链接与图片 | `[文本](url)`、``、`![alt](路径)`、title | | 脚注 | `[^id]` 引用与 `[^id]: 定义` | | 其他 | YAML front matter(仅用于取标题,导出时去除) | 原始 HTML 会被转义而不是渲染,`javascript:` / `vbscript:` 链接会被过滤,导出的文件可以放心分享。 ## 工作原理 1. `client.js` 在内置文档预览的 `sidebar.right.tab.document.actions` 插槽中注册一个列表项。 2. 点击后用 `ctx.remote.workspaceFiles.readBytes(...)` 读取 Markdown 源文件。 3. 内置渲染器把 Markdown 解析成 HTML,套用导出样式表,按文件所在目录解析相对图片路径,并内嵌最多 16 张本地图片(总量上限 10 MiB)。 4. **HTML**:生成 Blob URL,以 `<文件名>.html` 下载。 5. **PDF**:把同一份 HTML 载入隐藏的 `iframe` 并调用 `print()`;打印样式表负责页边距,以及代码块、表格、图片的 `break-inside: avoid`。 Host 端(`index.js`)是空的,所有逻辑都在浏览器中完成。 ## 安装 把本目录作为本地包安装到当前 profile: 1. 打开 DeepSeek Harness Web 界面。 2. 用插件管理器的 `install_bundle` 动作安装本目录(传入该文件夹的绝对路径)。 3. 变更立即生效;如果页面已经打开,刷新一次即可。 包内声明了 `dsh.bundle.patch`(`cordis.patch.yml`,插入 `markdown-export` 条目)和 `dsh.client` 段(声明依赖的客户端包)。无需额外依赖,也不需要构建步骤。 ## 使用 1. 在工作区文件树中打开一个 `.md` 文件,使其显示在右侧预览中。 2. 点击预览工具栏中的 **「导出」** 按钮(位于刷新按钮旁边)。 3. 选择格式: - **HTML 文档**:立即下载文件。 - **PDF 文档**:在弹出的对话框里选择 PDF 打印机或「另存为 PDF」。 ## 目录结构 ``` markdown-export/ ├── package.json # 插件清单(dsh.bundle + dsh.client) ├── cordis.patch.yml # 插入插件条目 ├── index.js # Host 端(空实现) ├── client.js # Markdown 渲染器 + 工具栏按钮 ├── icon.svg # 插件图标 └── locale/ ├── en.json # 英文展示元数据 └── zh.json # 中文展示元数据 ``` ## 已知限制 - PDF 走浏览器打印链路,由打印对话框产出文件,而不是直接下载。 - 导出通过带容量上限的工作区读取接口读取文件,超大文件会受其限制。 - 本地图片从磁盘内嵌;远程 `http(s)` 图片保留为链接,打开 HTML 时需要联网。 - 代码块只显示语言标签,不做语法高亮。 ## 许可证 [MIT](./LICENSE)