READMESource: main@670319f0
dsh-message-export
把 DSH 里某一条助手回答导出成 PNG 图片、PDF 或 HTML,保留页面已经渲染好的样子 —— 代码高亮、表格、公式、内联图片都不丢。
功能
点助手回答动作行上的「导出」按钮,菜单里:
| 菜单项 | 说明 |
|---|---|
| 下载 PNG | 只含这一条回答 |
| 下载 PNG(含提问) | 回答 + 你发的那句话 |
| 复制为图片 | PNG 直接写入剪贴板 |
| 下载 PDF | A4 分页 + 页边距,图片质量输出 |
| 下载 HTML | 单文件 HTML,浏览器打开后 Ctrl+P 可存成矢量 PDF(文字可选中) |
| 诊断信息 | 抓不到内容 / 高度异常时,把诊断 JSON 存下来排查 |
实现要点
导出不是截屏,而是把回复重新排版到离屏舞台上再栅格化:
- 用框架自己的
data-chat-*属性定位到那一轮回答; - 把回答的行克隆进离屏 stage;
- 把所有被折叠 / 滚动截断的容器「解开」,让内容完整展开;
- 嵌入文档里所有样式表(含主题变量),保证离屏渲染和页面一致;
- 通过 SVG
foreignObject栅格化到 canvas,再落成 PNG。
参数:四周留白 28px;浏览器允许的最大画布边 16000px —— 超高的回答优先降 DPR,而不是切图。抓取高度小于 60px 会被判定为异常,自动另存诊断文件(dme-diag-*.json / *.html)。
安装
# 从源码目录
dsh plugin --profile desktop add file:<插件目录>/dsh-message-export
# 或先打包
cd <插件目录>/dsh-message-export
npm pack --pack-destination ../dist
dsh plugin --profile desktop add "<插件目录>/dist/dsh-message-export-0.0.1.tgz"
装完重启 DSH(或等宿主推送 client bundle 重建)。
目录结构
index.js host 半边:空的 apply,只让 cordis loader 认得这个 bundle
client.js 全部功能:动作行入口、离屏排版、栅格化、PDF/HTML 输出
cordis.patch.yml bundle 插入项
locale/ 中英文案
icon.svg 图标
边界
- 依赖浏览器支持 SVG
foreignObject栅格化(Chromium / Firefox 正常)。 - 跨域图片若未开 CORS,栅格化时会被画布判为「污染」,导出会缺图 —— 这时用「下载 HTML」保底。
- 超长回答(高度超过 16000 CSS px)会按比例降低 DPR,像素数受浏览器画布上限限制。
License
MIT
No comments yet. Be the first to write one.