docx-editor
免费开源文档编辑器

AI Agent 驱动的所见即所得 (WYSIWYG) 文档编辑器,直接以 Word 原生 Office Open XML (OOXML) 规范为数据模型,无损解析和处理 Word 文档。

核心特点与优势

AI Agent 智能驱动

深度集成 AI 辅助,支持上下文感知写作、文本自动续写、智能语法润色、内容大纲总结及结构化文档自动生成,让你的文档编写事半功倍。

原生 OOXML 数据模型

拒绝“Word -> HTML -> Word”的损耗性转换。我们直接解析并操作 Office Open XML 原生规范,100% 映射 Word 文档的底层结构,杜绝样式丢失。

100% 浏览器客户端运行

无需配置或部署任何复杂昂贵的后台渲染服务器,完全在浏览器端运行。提供优秀的加载响应时间与离线可用性,完全隔离并保障文档的数据隐私安全。

专业级文档编辑能力

极致的所见即所得 (WYSIWYG) 体验。支持变更修订追踪 (Track Changes)、带回复的文档批注评论 (Comments)、复杂的表格与格式排版、图像插入等。

开源免费与商用友好

基于宽松的 Apache 2.0 开源许可,完全免费。完美支持商业项目使用(可商用),即使修改了编辑器代码也无需强制开源您的商业专有系统。

可扩展插件化架构

提供清晰、松耦合的插件化设计,开发者可随心所欲自定义工具栏选项、扩展编辑器命令和拦截核心编辑事件,保障二次开发的广度与深度。

典型应用场景

01

自研 AI 文档编辑器

借助 docx-editor 强大的纯客户端运行能力与可定制 API,企业可以快速构建专有的 AI 写作协同系统。无缝对接私有部署或垂直领域的 LLM 大模型,摆脱对第三方云服务的依赖,极致确保敏感文档在编写过程中的隐私安全。

02

行业知识库深度融合 (RAG)

通过与企业内部垂直知识库、法律法规数据库以及专有词库的深度融合,实现在编辑文档的同时进行实时语义检索。AI 助手可以根据行业知识背景提供高度精准的内容校对、合规性提示以及术语参考。

03

高价值商业文档与合同编辑

在法律、金融、政企等行业中,快速起草并精准校对合同文案至关重要。借助该编辑器对 Office 原生格式 (OOXML) 的 100% 格式无损还原能力,AI 可以智能识别合同中的漏洞与风险条款,大幅度压缩审核周期,降低企业运营风险。

TECHNICAL SELECTION

为什么说它是自研 AI 编辑器的最佳选择?

当企业决定自研或引入一个 AI 文档编辑器时,技术选型至关重要。基于底层架构的独特性,docx-editor 能够完美解决开发效率、兼容性与智能化深度的难题。

极致敏捷:快速交付上线

开箱即用的模块化设计,提供官方支持的 React 和 Vue 3 适配器。开发者无需花大量时间研究底层排版引擎,即可在几天内将成熟的 Word 在线编辑与 AI 协作机制无缝对接到企业已有的业务系统中。

全端覆盖:多客户端自由集成

基于标准的前端 Web 技术构建。编写一次组件,即可无缝集成在 PC 电脑网页、手机移动端网页(完美的触屏手势交互),或通过 WebView/Electron 技术整合至原生 App 客户端(手机 App/桌面客户端)。

Word 零摩擦兼容:用户上手无痛

采用标准的 DOCX 二进制格式作为流转模型。对企业中的行政、法务、策划等普通员工极度亲和,完全保持与 Microsoft Word 的格式兼容,规避了由于 HTML 转换造成的版式崩塌,直接承接企业既有资产。

深度 AI 驱动:精细控墨与富文本编排

打破传统“纯文本 AI 聊天框”的限制。AI 助手可以直接通过 API 精细且准确地操控文档底部的文字样式、列表级数、表格合并、段落缩进等丰富复杂的富文本版式,实现真正的智能编辑。

REAL-TIME COLLABORATION

毫秒级实时协同编辑

docx-editor 原生集成了 Yjs (CRDT 协同数据模型),支持多人在线协同编辑同份 Word 文档,状态实时同步:

  • 多人光标实时高亮展示,编辑路径一目了然
  • 基于 CRDT 冲突自动调和算法,无需加锁,保障离线编辑与合并
  • 灵活的协同连接器,轻松对接 WebSockets、WebRTC 或自定义网关
用户 A用户 B
SERVER-SIDE HEADLESS

Headless 无 DOM 渲染与处理

引擎在设计上将内核与 UI 视图分离开来。这使得您能够在 Node.js 或命令行等非浏览器环境中高效加载并操作 Word 文件:

  • 在服务端批量注入变量、填充模板、生成自动化报告
  • 无需任何虚拟浏览器环境 (如 Puppeteer/JSDOM),运行效率极高
  • 通过插件扩展,支持从命令行或后端服务器进行文档的快速预渲染
$ npm run compile-reportLoading docx template [success]Injecting dataset variables... (124 fields)Output saved to ./report_2026.docx

同类开源库对比

我们深知企业在面对开源选择时的慎重。以下是 docx-editor 与同类知名开源编辑器 SuperDoc 的关键差异对比:

对比维度 docx-editor SuperDoc
开源许可协议 (商用门槛) Apache 2.0 (极度宽松)

完全免费商用,即使修改了源码也无需开源您的商业业务代码,0 商业授权风险与成本。

AGPL 3.0 (传染性强)

只要通过网络提供服务就必须强制开源您的整个商业系统代码,若闭源使用须购买昂贵的商业授权。

中日韩 (CJK) 输入法支持 已适配中日韩输入法打字

底层对键盘 IME (中文、日文、韩文拼音输入法) 进行深度事件拦截与组合优化,打字顺畅,绝无拼音残留和光标乱跳。

体验不佳 (存在严重 Bug)

在进行中文/日文/韩文打字输入时,由于 Composition 组合事件处理不完善,经常导致拼音残留、文字重复乱码及光标错乱。

核心完成度与稳定性 高度成熟

提供原生 Yjs 协同冲突调和,核心模块与 UI 层彻底解耦,经历过复杂生产环境验证,功能稳定成熟。

开发进行中

部分高级富文本格式仍处于实验性阶段,离线合并与复杂排版的稳定性仍需迭代验证。

快速集成到您的项目

1. 安装 React 适配器包与相关依赖

# 安装最新稳定的 React 版本 docx-editor 依赖
npm install @eigenpal/docx-editor-react

2. 在组件中引入并进行配置

import React, { useState } from 'react';
import { DocxEditor } from '@eigenpal/docx-editor-react';
// 引入样式文件确保工具栏和编辑区域表现正确
import '@eigenpal/docx-editor-react/styles.css';

function DocumentWorkspace() {
  const [docBuffer, setDocBuffer] = useState(null);

  const handleSave = (updatedBuffer) => {
    // updatedBuffer 是修改后的 Word 原生二进制数据 (ArrayBuffer)
    console.log('文档数据更新:', updatedBuffer);
  };

  return (
    <div style={{ height: '80vh', border: '1px solid rgba(255,255,255,0.08)' }}>
      <DocxEditor
        documentBuffer={docBuffer}
        onSave={handleSave}
      />
    </div>
  );
}

export default DocumentWorkspace;

1. 安装 Vue 3 适配器包与依赖

# 安装针对 Vue 3 设计的封装包
npm install @eigenpal/docx-editor-vue

2. 创建 Vue 编辑器组件

<template>
  <div class="editor-container">
    <DocxEditor
      :documentBuffer="docBuffer"
      @save="handleSave"
    />
  </div>
</template>

<script setup>
import { ref } from 'vue';
import { DocxEditor } from '@eigenpal/docx-editor-vue';
// 引入对应的 CSS 文件以正常渲染编辑器界面
import '@eigenpal/docx-editor-vue/styles.css';

const docBuffer = ref(null);

const handleSave = (updatedBuffer) => {
  // 捕获最新的 .docx ArrayBuffer 数据,在此提交保存到云端或本地
  console.log('Vue 端接收到文档更新:', updatedBuffer);
};
</script>

<style scoped>
.editor-container {
  height: 80vh;
  border: 1px solid rgba(255, 255, 255, 0.08);
}
</style>