Skip to content
←返回开源项目

OPEN SOURCE DEEP DIVE

DeepSeeklibreofficeoffice-automation

DeepSeek 开源 dsh-libreoffice-kit:Node.js 里"字体友好"的 Office 转换渲染套件,Agent 办公文档链路补齐

DeepSeek Harness 内部组件开源(npm @deepseek-ai/libreoffice-kit + dsoffice CLI):Office→PDF 导出(OOXML + 97-2003 二进制)、表格重算、Office/PDF 直接按页渲染 PNG;"字体友好"=字体发现/指定族保留/可配置替换(Carlito 顶 Calibri、Caladea 顶 Cambria)/missingFonts 报告与预算;五平台预置引擎(macOS ARM64/x64、Windows ARM64/x64、Linux WASM)可离线打包,精简后下载体积 -37~39%;不依赖用户机器的 LibreOffice 安装。

deepseek-ai/dsh-libreoffice-kit41JavaScriptMPL-2.02 min read

DeepSeek Harness 的内部组件走向开源

dsh-libreoffice-kit 是 DeepSeek Harness 内部使用的一个组件,现以 @deepseek-ai/libreoffice-kit 名义开源(npm 包,附 dsoffice CLI)。它解决一个 Agent 办公场景里的真实痛点:在 Node.js 里做"字体友好"的 Office 文档转换与渲染——读取 Git diff 之外,Agent 还需要能读、能转、能算、能截图 Office 文档,而传统方案要么依赖用户机器上碰运气的 LibreOffice 安装,要么字体一缺排版就崩。

能力全景

  • 格式转换:Office → PDF 导出,支持 OOXML(.docx/.xlsx/.pptx)与二进制 OLE 复合文档(Office 97–2003 的 .doc/.xls/.ppt;改名后缀的 RTF/HTML 与 .wps 不接受)。
  • 电子表格重算(recalculate):让 Agent 拿到公式计算后的值,而不是公式本身。
  • 直接 PNG 渲染:Office 与 PDF 输入均可按页渲染成图片——正是 Agent"看"文档的方式。
  • CLI + Node API:dsoffice render/convert/recalculate 一条命令可用;API 层支持取消、错误与资源限制,每个 render 拥有独立原生进程或 Node worker 与私有 profile,同一 converter 上的渲染串行执行。
npm install @deepseek-ai/libreoffice-kit@0.1.3
dsoffice convert --input report.docx --output report.pdf
dsoffice render --input report.docx --output-dir report-pages --pages 1
dsoffice recalculate --input budget.xlsx --output recalculated.xlsx

"字体友好"是什么意思

这是这个 kit 与普通 LibreOffice 封装的核心区别:

  • 用可用字体:API 自动发现常规系统/用户字体目录,或索引 fontDirectories 指定的根;fontkit 读取字体元数据与字形覆盖,选中的文件以原始字体字节交给引擎。
  • 保住指定字体族:已安装的字体族优先(包括手写体与装饰字体);WASM 字体请求携带 weight/italic 信息,可匹配具体字面;缺字形时目录可补充字体。
  • 替换规则可配置:默认 fontFallbacks 覆盖常见拉丁与简中字体族——缺 Calibri 用 Carlito 顶、缺 Cambria 用 Caladea 顶;调用方可整体替换默认组。
  • 暴露缺失字体与预算:missingFonts 报告文档 XML 中声明但不可用的字体族;maxFontFiles/maxFontFileBytes/maxLoadedFontBytes 限定索引与显式导入的规模;字体元数据在内存与有界用户级磁盘缓存间共享。

注意边界:它不捆绑也不下载任何字体集合——部署方按文档需求与再分发权限自备字体(最小容器需装字体或配置字体目录);WASM 引擎只用导入的字体,没有可用字体时以 unavailable 拒绝转换。这提升了字体控制力,但不保证与 Microsoft Office 或引擎之间逐像素一致。

引擎与分发:为打包而生的精简 LibreOffice

项目附带了完整的 LibreOffice 精简配方:禁用 Java/Python、脚本与扩展、Base 数据库、PDF 导入、帮助/词典/模板/图标主题、远程控制与更新、curl/WebDAV/CMIS/LDAP 集成——只保留文档导入、布局、绘制与 PDF 导出链路;原生构建静态链接 Core、限制导出符号;WASM 构建为无头 Node worker 裁掉 Skia/OpenCL/OpenGL 与捆绑字体。五个引擎包按平台自动安装:

引擎包平台
libreoffice-kit-darwin-arm64 / darwin-x64macOS(Apple Silicon / Intel)
libreoffice-kit-win32-arm64 / win32-x64Windows ARM64 / x64(需 VC++ v14 Redistributable)
libreoffice-kit-wasmLinux(共享 WASM 引擎,无 CPU/libc 限制声明)

精简效果(历史候选测量,含 XZ 压缩因素):macOS ARM64 下载 98.85MB → 60.49MB(-38.81%),Node WASM 56.47MB → 35.85MB(-36.51%)。保真验证用六份中英文混合(含表格/公式/图片)的 DOCX/XLSX/PPTX 固定文档对比,提取文本、页数与 96-DPI 渲染像素完全一致。安装不带任何编译钩子——不现场编译 LibreOffice、不下载额外引擎、也不探测用户机器上已装的 LibreOffice;应用可完全离线打包运行。

对 Agent 办公场景的意义

把它放进 Agent 工具箱,意味着文档处理链路的"最后一公里"被补齐:读(渲染成 PNG 给多模态模型看)、转(PDF 导出交付)、算(表格重算拿结果)都有了确定性的、可离线的、字体可控的本地方案——不需要把文档上传到云转换服务,也不依赖目标机器装了哪个版本的 Office/LibreOffice。

仓库:github.com/deepseek-ai/dsh-libreoffice-kit(含中文 README、打包与构建资格认证文档)。

相关开源项目