返回

文章详情

显示 HN: DOM-docx – 将 HTML 转换为本机可编辑的 Word 文档 (MIT)

Hacker News2026年7月13日 11:51

将语义 HTML 片段转换为本机可编辑的 Word 文档 (OOXML): 段落、文本运行、列表、表格、图片。不是截图或布局技术。实时演示: dom-docx.com。尝试转换器,浏览展示,阅读学习指南。使用视觉回归循环构建: 在 Chromium 中渲染 HTML,转换为 docx,通过 LibreOffice 光栅化,依据人类验证的指标评估布局 + 结构保真度,进行迭代。最新分数: TEST-SCORES.md · 方法论: SCORING.md。安装 npm install dom-docx 需要 Node.js ≥ 20。默认行内路径不需要浏览器或 Playwright。当何时需要 Playwright?入口样式来源: "inline" 样式来源: "computed" 原地光栅化 节点 (dom-docx) 纯 JS,无需浏览器 Playwright + Chromium Playwright + Chromium (同一无头页面) 浏览器 (dom-docx/browser) 纯 JS,无需实时 DOM 实时页面: 原生 getComputedStyle 实时页面: canvas/SVG → PNG <img> 在标签中 在 Node 中,playwright 是一个可选的对等依赖关系。npm install dom-docx 仅拉取 docx、cheerio 和 fflate,没什么沉重的。仅在您传递样式来源: "computed" 或原地光栅化 时懒加载。要使用这些路径,自己安装 Playwright 和 Chromium,一次性: npm install playwright npx playwright install chromium Playwright 也用于开发测试工具(使用库时不需要)。贡献者: 克隆后运行 npm run setup。进行转换时无需 LibreOffice。它仅用于视觉测试工具。CLI 不写任何代码即可转换文件: npx dom-docx input.html -o output.docx npx dom-docx input.html # 在旁边写入 input.docx cat fragment.html | npx dom-docx - -o - # stdin → 二进制 stdout (管道) npx dom-docx input.html -s computed # 样式表/类 HTML(需要安装 playwright)npm install -g dom-docx # 可选:全局安装,然后运行 "dom-docx" 而无需 npx 输入是主体 HTML 片段,与 API 相同。--help 查看所有选项。快速开始 浏览器 导入 { convertHtmlToDocx } 来自 "dom-docx/browser"; const html = ` <h1 style="color:#1a1a2e">季度报告</h1> <p>收入同比增长<strong>12%</strong>。</p> <ul> <li>北美</li> <li>EMEA</li> </ul> `; const blob = await convertHtmlToDocx(html); // 例如,在浏览器中触发下载 const a = document.createElement("a"); a.href = URL.createObjectURL(blob); a.download = "output.docx"; a.click(); 不需要 Playwright,也不需要 Node。这完全在用户的标签中运行。请参阅下面的浏览器包。 Node 导入 { writeFile } 来自 "node:fs/promises"; 导入 { convertHtmlToDocx } 来自 "dom-docx"; const html = ` <h1 style="color:#1a1a2e">季度报告</h1> <p>收入同比增长<strong>12%</strong>。</p> <ul> <li>北美</li> <li>EMEA</li> </ul> `; const docx = await convertHtmlToDocx(html); await writeFile("output.docx", docx); 仅传递主体片段(不需要 <!DOCTYPE> / <html> / <body>)。默认: 美国信纸,1 英寸边距,Arial 10.5pt 正文。v0.1.x 功能 支持(默认样式来源: "inline"): 标题、段落、列表 (<ul>/ <ol> 包括列表样式类型)、表格、链接、行内格式化 块背景、引用、<hr>、简单弹性行(≤4 项)数据: 图片; 通过您的 imageResolver 远程图片 页面大小/方向/边距、默认字体、元数据、页眉/页脚 HTML、页码、目录、语言/方向 低复杂性内联 SVG(条形+文本) CSS 条形 div 在表格单元格中(背景 + 高度/宽度 → 本机着色条) 高级(可选样式来源: "computed"): 通过 getComputedStyle 解析 <style> 块和类/ #id 选择器 Node: 需要 playwright (可选对等依赖项,单独安装) + Chromium。该库启动无头 Chromium 来渲染片段 浏览器包: 使用用户标签中的实时 DOM。不需要 Playwright,无需额外安装 SPA 片段导出: 在转换时传递 root(浏览器)或 rootSelector(Node + 实时页面)使得 computed-style 路径与片段树匹配 行内是 npm 安装的支持默认的;计算用于样式表/类或当您已经有一个渲染页面 图表和复杂 SVG(可选原地光栅化):在转换之前将 <canvas> 和复杂 <svg>(例如 Highcharts)光栅化为 PNG <img> 推荐的图表: 原地光栅化: { scale: 2 } — 在 Word 中以较高的密度超采样 2 倍以获得更清晰的图像(默认缩放: 1;最大 4) 浏览器: 要求 root。默认情况下在屏幕外克隆,因此实时页面不被更改 Node: 使用与计算样式相同的 Playwright/Chromium 上下文;临时生成的页面默认在原地修改 简单内联 SVG(矩形 + 文本条形图)仍然无需光栅化即可原生转换 在 v0.1.x 中不支持: 内联路径上的外部样式表(使用计算或内联所有样式) 网络字体、CSS 网格/浮动布局、表单、<pre> 修饰、<dl>、表格行跨度 页眉/页脚第一个/偶数页面变体;保证多页布局的保真度 复杂 SVG(路径、渐变、<use>)

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡