For AI agents: the complete documentation index is available at https://a3s-lab.github.io/Office/docs/llms.txt, the full documentation bundle is available at https://a3s-lab.github.io/Office/docs/llms-full.txt, and this page is available as Markdown at https://a3s-lab.github.io/Office/docs/browser-editor-architecture.md.
  • 简体中文
  • latest
  • 浏览器编辑器架构

    A3S Office 是一套可以嵌入业务应用的完整编辑器组件。它在产品边界采用 Headless 设计:组件库负责编辑模型、命令、渲染和编辑器界面;宿主负责文件保存、身份权限、 协作、应用导航和 AI 服务。

    总体结构

    宿主应用
    ├── 文件、权限、协作、版本与 AI
    └── A3S Office 公共接口
        ├── React / Vue / Web Component
        ├── 受控内容模型与宿主事件
        ├── 编辑器界面
        │   ├── Document:TipTap / ProseMirror
        │   ├── Markdown:源码 + TipTap
        │   ├── Spreadsheet:工作簿与计算模型
        │   ├── Presentation:场景图 + 按需文本编辑
        │   └── PDF:PDFium 渲染与批注
        └── 计算与文件能力
            ├── Web Worker
            ├── Rust / WebAssembly 内核
            └── DOCX、XLSX、PPTX、Markdown 与 PDF 导入导出

    这条边界保证同一编辑器可以进入不同产品,而不把某一种后端、账号系统或 AI 模型 写死在组件中。

    单一内容来源

    每种编辑器都保留与文件格式和交互方式匹配的主模型,而不是把所有格式压成一份 HTML。

    编辑器主模型UI 编辑层
    Document带版本的文档树、分节、分页与页面元素TipTap / ProseMirror
    MarkdownMarkdown 字符串源码编辑与 TipTap 可视化视图
    Spreadsheet工作簿、工作表、单元格、公式与样式表格网格与 A3S 计算控制器
    Presentation幻灯片场景图、母版、版式与对象画布交互,文本编辑时挂载 TipTap
    PDFPDF 二进制与增量批注状态PDFium 页面与批注控制器

    HTML 只在兼容边界使用,不是所有 Office 文件的持久化真相。这样才能保留分页、公式、 母版、批注和对象几何等格式语义。

    Markdown 在桌面和平板端使用可调整的源码与预览分栏,预览正文限制为适合阅读的行宽。 手机端不会把两块内容堆叠成上下半屏,而是通过“源码 / 预览”切换让当前界面独占工作区; 这只是显示方式变化,不会创建第二份内容状态。

    文档排版管线

    Document 的逻辑内容始终由同一个 TipTap 编辑器持有。排版流程读取结构化文档、页面 设置和字体清单,完成文本塑形、可视行测量、分页与页面元素定位,再把结果同时交给编辑、 只读预览和浏览器 PDF 导出。

    受控文档
      → TipTap 事务与结构化模型
      → 字体解析、回退与文本塑形
      → 可视行测量
      → 分节、分页、表格续排与浮动对象约束
      → 页面栈
          ├── 编辑界面
          ├── 只读预览
          └── PDF 导出

    耗时且可取消的计算放进 Worker。Rust / WebAssembly 内核负责需要确定性和跨界面一致的 部分;DOM 测量只用于浏览器特有或暂未进入内核的内容。新的计算结果带版本,过期任务 不会覆盖更新后的文档。

    表格几何不会再被压缩成一个“窗口 / 内容 / 固定”状态。排版算法、自动 / 百分比 / 像素 首选宽度、左中右对齐、缩进、表级四边单元格边距和单元格级边距覆盖分别进入类型化模型, 编辑、预览、打印和 DOCX 往返共享同一份数据。导入与导出分别保留 w:tblLayoutw:tblWw:jcw:tblIndw:tblCellMarw:tcMarw:tblGridw:tcW; OOXML 中以五十分之一百分比或百分数字符串表示的宽度都会按真实比例渲染,不再把 50% 错误放大为 100%。表格布局功能区通过统一的“表格属性”弹窗编辑表格、行、列和单元格四类属性。 弹窗同时管理首选宽度、位置、缩进、当前行高与分页、当前列宽、单元格垂直对齐和边距, 校验完整草稿后用一次 TipTap 事务和一条撤销记录提交。弹窗中的厘米数字只是显示投影; 未修改的像素值和单元格部分边距继承直接从类型化源模型复制,不会经过两位小数回显再次量化。 取消或 Escape 不修改文档,并把焦点还给原触发按钮。紧凑布局中的四个页签、选项、数字步进和 底部操作均保持视口内可用的触控区域。真实 DOCX 样本及 A3S Test 会同时检查 62.5% 居中表格、 四个属性页签、原子提交与取消安全、导入边距的精确保留,以及编辑和预览几何一致性。

    图片节点分别保存宽度、高度、是否锁定纵横比、文字环绕、对齐、文字距离和替代文字。 选中图片后,“图片”功能区保留常用快捷操作,并通过一个响应式“图片属性”弹窗统一编辑 这些字段。确定时只把真正变化的字段写入一次独立 TipTap 历史记录;取消和 Escape 不修改 文档,并把焦点精确还给原触发按钮。导入尺寸只是按厘米投影到输入框,没有修改的像素值会 原样保留,不会因两位小数回显发生量化。纵横比锁定属于每张图片自身的属性,因此弹窗和 后续拖拽缩放使用同一规则。390 像素宽的 A3S Test 流程覆盖尺寸、解锁比例、四周环绕、 右对齐、文字距离、替代文字、图片选区保持、焦点归还以及零控制台和页面错误。

    表格边框使用每个单元格独立的上、右、下、左属性,而不是一条统一 CSS 边框。表格设计 功能区维护可复用的颜色与线型笔,并通过所有、外侧、内部、单边、内部横向和内部纵向 目标生成一次 TipTap 事务。编辑和只读预览直接渲染同一组属性;DOCX 导入把 w:tblBorders 的外侧与内部语义解析到单元格边,把显式 w:tcBorders 作为覆盖,导出则 逐边写回 w:tcBorders。默认或显式 w:type="table" 样式会经过有界且可处理循环的 w:basedOn 链解析;w:tblLook、横纵带状尺寸、跨列和行网格偏移共同选择整表、带状、 首末行列和四角条件。条件填充、逐边边框、文字强调、字体和颜色,以及段落对齐、方向、 缩进、间距与行距规则、分页规则和制表位,都会在段落样式之后、直接段落和文字格式之前 进入同一编辑模型;表格和单元格直接格式仍优先于样式中的单元格效果。主题派生颜色会 转换为稳定 RGB,保证编辑、预览和重新导出一致。支持范围之外的少见条件段落属性、导出 后保留语义主题引用、嵌套表格和复杂合并单元格流尚未宣称完整保真。

    编辑发生在长文档尾部时,分页只回退到安全页面边界。稳定前缀不仅复用内核页面,也复用 已经解析的首页、默认页和偶数页页眉页脚、页码、页面摘要与导航位置;回退边界及其后的 页面才重新派生。运行时会报告复用和重新派生的页饰数量,让确定性浏览器测试直接约束 增量预算,而不是依赖不稳定的耗时判断。

    分页缩略图与 PDF 捕获

    Word 导航窗格和浏览器 PDF 导出复用同一套物理页面捕获边界。缩略图不会再根据正文 片段拼出近似卡片,而是克隆已经完成测量的实时分页页面,移除编辑状态,再按精确页面 偏移裁剪为图片。当前页和相邻页优先进入串行队列,其余页面通过可视区域窗口按需捕获; 页面内容变化会触发防抖刷新,离开窗口的图片会释放。

    分页完成就是这里的布局就绪依据。捕获过程不会等待与当前页面无关的整份字体集合,也 不依赖后台智能体标签页可能永久暂停的动画帧。正文摘要只在加载或失败时作为降级内容。 超过 48 页时,导航窗格只挂载最多 24 个连续页面按钮;当前页和键盘游标页位于窗口外 时会作为稀疏锚点保留。可变高度占位块保持原生滚动距离,Home 和 End 可以直接挂载并 聚焦首尾页,不依赖浏览器动画帧。基于真实 120 页 DOCX 的 A3S Test 已验证挂载上限、 首尾页键盘跳转、选择、焦点保持和占位几何。图片捕获与页面按钮 DOM 均已有边界。

    页面列表、标题树和全文搜索结果复用同一套导航窗口模型。标题与搜索结果超过 48 条后, 最多挂载 32 个连续条目,并仅在窗口外稀疏保留当前项、选中项或键盘游标项。前置、中间和 后置物理占位块保持原生滚动距离;即使大部分条目没有挂载,aria-posinsetaria-setsize 仍反映完整集合。Home 和 End 无需依赖动画帧即可挂载首尾目标。真实 120 页 DOCX 同时包含 120 个内置标题和 120 个正文匹配,确定性流程已验证标题与搜索 结果的挂载上限、首尾键盘访问、精确结果选择,以及无控制台和页面错误。长距离程序化 选择会把文档滚动临时切为即时模式并保持到下一次绘制,再恢复原有平滑滚动样式,因此 正文目标可以在同一帧准确显示。

    修订审阅在超过 48 条修订时复用同一窗口模型。界面最多挂载 32 张连续修订卡片,键盘 游标所在卡片作为稀疏锚点保留,省略范围由物理占位块表示。方向键、PageUp/PageDown、 Home 和 End 因此可以访问完整审阅队列,而无需一次挂载全部条目。接受或拒绝一条修订 后,焦点会移动到相邻保留条目的同类操作。确定性 A3S Test 会导入包含 120 条原生 OOXML 插入修订的真实 DOCX,并验证挂载上限、首尾焦点、120 到 119 的决策变化、占位 几何,以及零控制台和页面错误。

    Extension 边界

    Document 与 Markdown 可以接收 TipTap Extension。宿主应保持 Extension 数组引用 稳定,并确保名称唯一。自定义 Node 或 Mark 如果需要经过 DOCX 或 Markdown 往返后 继续存在,还必须提供对应的解析和序列化语义。

    Spreadsheet、Presentation 与 PDF 目前通过 fileActionsonAgentRequestloadSourceonSave 和放映事件等类型化接口扩展。内部命令上下文尚未承诺兼容性, 因此不会作为公共 API 暴露。

    文件与运行时资源

    编辑器实现按类型拆包。打开某一种文件时才加载对应组件、Worker、字体或 PDFium 资源; 宿主也可以在可预期的导航前调用预加载 API。组件不要求 A3S 后端,资源地址可由宿主 覆盖,以适配 CDN、离线环境和内容安全策略。

    正确性原则

    • 受控内容是宿主与编辑器之间的唯一状态协议。
    • 编辑、预览与导出尽量复用同一排版结果,避免三套视觉逻辑。
    • 不支持的文件语义要明确报告,不能静默丢弃或伪装成高保真结果。
    • 异步命令必须检测过期选区和过期文档版本。
    • 快捷键、弹窗、菜单与焦点行为属于编辑器公共质量,不由宿主重复实现。
    • 右键菜单在桌面端跟随鼠标或键盘选区定位,在手机端使用带 44 px 操作项和内部滚动的 底部操作面板;两种布局保持同一命令顺序、快捷键和焦点归还行为。
    • 大文档计算必须有边界、可取消,并避免随页数无上限挂载 DOM。

    当前边界

    当前架构已经覆盖五类编辑器的公共组件、受控模型、按需加载和主要文件流程,但仍需继续 提高 DOCX 字体替代、段落与分页、复杂表格、浮动对象、母版继承、公式兼容性和可搜索 矢量 PDF 等能力。对 WPS / Word 的视觉一致性必须用真实 OOXML 文件、固定字体与 逐页截图证据验证,不能只用简单 HTML 示例判断。

    需要逐模块实现清单、协议字段和性能门槛时,请切换到 English 完整工程参考