核心功能
Univer Docs 的核心功能包含了文档编辑器、公式引擎、渲染引擎、设计系统和 UI 组件库等。它们共同构成了一个强大的文档处理平台,支持多种文档格式和复杂的文档操作。
特性
Univer Docs 的核心功能包括:
- 文档渲染:支持 Univer Docs 的渲染和光标、选区的绘制。
- 文档排版:支持全文排版,包括段落设置,段前后间距、段落对齐、缩进和悬挂等,也包括段落中的排版能力,标点挤压、标点悬挂、字偶间距、西文断词等。
- 公式计算:支持 Univer 公式的添加和计算(开发中)。
- 表格能力:支持插入基本表格和表格的编辑,新增、删除行类操作,编辑单元格等。
- 文档风格:Univer Docs 不仅支持类似 Microsoft Word 的传统文档风格(包含分页、页眉页脚等),也支持类似 Notion 的现代文档风格。在现代文档风格中,无需分页,内容可以无限扩展,支持多种官方或第三方块级元素(如文本、图片、表格等)的混合排版(计划中)。
- 页眉页脚:支持插入页眉页脚和编辑页眉页脚内容,可以区分首页及奇偶页等,仅传统文档支持。
- 列表功能:支持有序、无序列表和任务列表的插入和编辑,支持列表的缩进和反缩进等。
- 表情与符号:可从 Docs 功能区插入表情和符号。
- 插件系统:支持插件系统,可以自定义插件,如公式插件、图片插件、图表插件等,这也是 Univer 核心架构能力之一。
插件模式
安装
pnpm add @univerjs/core @univerjs/engine-render @univerjs/engine-formula @univerjs/design @univerjs/ui @univerjs/docs @univerjs/docs-uinpm install @univerjs/core @univerjs/engine-render @univerjs/engine-formula @univerjs/design @univerjs/ui @univerjs/docs @univerjs/docs-uiyarn add @univerjs/core @univerjs/engine-render @univerjs/engine-formula @univerjs/design @univerjs/ui @univerjs/docs @univerjs/docs-uibun add @univerjs/core @univerjs/engine-render @univerjs/engine-formula @univerjs/design @univerjs/ui @univerjs/docs @univerjs/docs-ui使用
import { LocaleType, mergeLocales, Univer } from '@univerjs/core'import { FUniver } from '@univerjs/core/facade'import DesignZhCN from '@univerjs/design/locale/zh-CN'import { UniverDocsPlugin } from '@univerjs/docs'import { UniverDocsUIPlugin } from '@univerjs/docs-ui'import DocsUIZhCN from '@univerjs/docs-ui/lib/locale/zh-CN'import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula'import { UniverRenderEnginePlugin } from '@univerjs/engine-render'import { UniverUIPlugin } from '@univerjs/ui'import UIZhCN from '@univerjs/ui/locale/zh-CN'import '@univerjs/docs/facade'import '@univerjs/docs-ui/facade'import '@univerjs/design/lib/index.css'import '@univerjs/ui/lib/index.css'import '@univerjs/docs-ui/lib/index.css'const univer = new Univer({ locale: LocaleType.ZH_CN, locales: { [LocaleType.ZH_CN]: mergeLocales(DesignZhCN, UIZhCN, DocsUIZhCN), },})univer.registerPlugin(UniverRenderEnginePlugin)univer.registerPlugin(UniverFormulaEnginePlugin)univer.registerPlugin(UniverUIPlugin, { container: 'app',})univer.registerPlugin(UniverDocsPlugin)univer.registerPlugin(UniverDocsUIPlugin)const univerAPI = FUniver.newAPI(univer)univerAPI.createDocument({})插件与配置
@univerjs/core
本插件是 Univer 的核心库,提供了创建 Univer 实例、主题、语言等基础功能。
import type { IUniverConfig } from '@univerjs/core'import { LocaleType, Univer } from '@univerjs/core'const config: IUniverConfig = { locale: LocaleType.ZH_CN, darkMode: false,}const univer = new Univer(config)@univerjs/engine-render
本插件是 Univer 的渲染引擎,负责渲染、滚动条、光标和选区等的绘制。其提供了 UniverRenderEnginePlugin 插件。
@univerjs/engine-formula
本插件是 Univer 的公式引擎,负责公式的计算和处理。其提供了 UniverFormulaEnginePlugin 插件。
@univerjs/design
本插件是 Univer 的设计系统,提供了所有的基础组件和样式。
详见: UI 章节
@univerjs/ui
本插件是 Univer 的 UI 基座。其提供了 UniverUIPlugin 插件。
UniverUIPlugin 提供了一些配置项,可用于基础布局的配置。
interface IUniverUIConfig { // 容器元素,可以是字符串或者 DOM 元素。 container?: string | HTMLElement // 是否显示头部 header?: boolean // 是否显示头部工具栏 toolbar?: boolean // 头部工具栏的类型。'classic': 默认经典模式;'grid': 两行网格模式;'collapsed': 紧凑模式;'simple':不分组模式 ribbonType?: RibbonType // 是否显示右键菜单 contextMenu?: boolean // 是否禁用自动聚焦 disableAutoFocus?: true // 依赖注入的覆盖配置 override?: DependencyOverride // 菜单配置 menu?: MenuConfig}其中,menu 配置项可以用于简单地设置某些特定菜单项的显示或隐藏等状态:
univer.registerPlugin(UniverDocsUIPlugin, { menu: { 'doc.command.set-inline-format-bold': { hidden: true, }, 'doc.command.set-inline-format-italic': { hidden: true, disabled: true, }, },})这里的 'doc.command.set-inline-format-bold' 和 'doc.command.set-inline-format-italic' 是命令的名称,表示对应的菜单项。
@univerjs/docs
本插件是 Univer Docs 的核心插件。其提供了 UniverDocsPlugin 插件。
@univerjs/docs-ui
本插件是 Univer Docs 的 UI 插件,包含了文档编辑器的 UI 组件和交互。其提供了 UniverDocsUIPlugin 插件。
预设模式
安装
pnpm add @univerjs/presets @univerjs/preset-docs-corenpm install @univerjs/presets @univerjs/preset-docs-coreyarn add @univerjs/presets @univerjs/preset-docs-corebun add @univerjs/presets @univerjs/preset-docs-core使用
import { UniverDocsCorePreset } from '@univerjs/preset-docs-core'import UniverPresetDocsCoreZhCN from '@univerjs/preset-docs-core/locales/zh-CN'import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'import '@univerjs/preset-docs-core/lib/index.css'const { univer, univerAPI } = createUniver({ locale: LocaleType.ZH_CN, locales: { [LocaleType.ZH_CN]: mergeLocales(UniverPresetDocsCoreZhCN), }, presets: [UniverDocsCorePreset()],})univerAPI.createDocument({})预设与配置
@univerjs/presets
本预设提供了创建 Univer 应用所需的 createUniver 方法,以及暴露了 @univerjs/core 和 @univerjs/design 的所有方法和对象。
createUniver 方法接受一个配置对象,包含主题、语言、预设等选项,返回一个 Univer 实例 univer 和用于调用 Facade API 的 FUniver 实例 univerAPI。
interface ICreateUniverParameter { // Univer 实例的主题,默认使用 defaultTheme theme: IStyleSheet // 是否使用暗黑模式,默认为 false。 darkMode?: boolean // Univer 实例的语言环境 locale: LocaleType region?: LocaleType // 要使用的语言环境对象,键为语言环境类型,值为对应的语言环境对象 locales: ILocales // Univer 实例的日志级别 logLevel?: LogLevel // 要使用的预设列表。 presets: IPresets[] // 要使用的插件列表。 plugins: IPlugins[]}参考:createUniver
@univerjs/preset-docs-core
本预设是 Univer Docs 的核心预设,包含了文档编辑器、公式引擎、渲染引擎等电子文档必要的核心功能。
interface IUniverDocsCorePresetConfig { // 容器元素,可以是字符串或者 DOM 元素 container?: string | HTMLElement // 是否显示头部 header?: boolean // 是否显示头部工具栏 toolbar?: boolean // 头部工具栏的类型。'classic': 默认经典模式;'grid': 两行网格模式;'collapsed': 紧凑模式;'simple':不分组模式 ribbonType?: RibbonType // 是否显示底部。 footer?: boolean // 是否显示右键菜单 contextMenu?: boolean // 是否禁用自动聚焦 disableAutoFocus?: true // 菜单配置 menu?: MenuConfig // ... 更多配置项}其中,menu 配置项可以用于简单地设置某些特定菜单项的显示或隐藏等状态:
UniverDocsCorePreset({ menu: { 'doc.command.set-inline-format-bold': { hidden: true, }, 'doc.command.set-inline-format-italic': { hidden: true, disabled: true, }, },})这里的 'doc.command.set-inline-format-bold' 和 'doc.command.set-inline-format-italic' 是命令的名称,表示对应的菜单项。
视图控制
视图工具栏包含页面设置、缩放和全屏入口。缩放选择器与底部缩放条显示相同的文档视图比例;调整比例不会修改文字格式。
菜单顺序与网格布局
先使用 Docs 菜单 ID 定义共用的 MenuConfig,再按接入模式应用配置:
import type { MenuConfig } from '@univerjs/ui'const menu: MenuConfig = { 'ribbon.start.format': { order: -1 }, 'doc.command.set-inline-format-bold': { order: 0, gridLayout: { row: 2, column: 2 }, }, 'doc.command.set-inline-format-italic': { gridLayout: { row: 2, column: 1 }, },}按接入模式将以下选项合并到已有的初始化配置中,保留其他插件、语言、主题和容器配置,不要重复注册同一插件。
import { UniverUIPlugin } from '@univerjs/ui'univer.registerPlugin(UniverUIPlugin, { ribbonType: 'grid', menu,})import { UniverDocsCorePreset } from '@univerjs/preset-docs-core'import { createUniver } from '@univerjs/presets'const { univerAPI } = createUniver({ presets: [ UniverDocsCorePreset({ ribbonType: 'grid', menu, }), ],})初始化后,使用 updateMenuConfig() 更新已有实例:
import '@univerjs/ui/facade'univerAPI.updateMenuConfig(menu)order 按数值从小到大排列同级节点;gridLayout 仅用于网格 Ribbon,坐标在各自的两行分组内从 1 开始。运行时更新会保留未指定的属性并立即刷新 UI。插件模式下,将 menu 传给 UniverUIPlugin,并先导入 @univerjs/ui/facade 再调用 Facade。网格字段及自定义按钮示例见菜单布局指南。
粘贴选项
Docs 支持保留源格式、匹配目标格式和仅保留文本三种粘贴方式。匹配目标格式会采用目标文字及段落样式,同时保留粗体、斜体等受支持的强调格式。仅保留文本会移除图片和超链接,表格转为制表符分隔的文本。粘贴后可通过选项切换最近一次粘贴的方式;浏览器禁止读取剪贴板时,使用键盘快捷键或系统粘贴。
桌面端 Ribbon 的粘贴下拉菜单位于撤销、重做旁,编辑形状文本时会隐藏。桌面端和移动端右键菜单中的选择性粘贴均位于格式分组。
页眉页脚字段
在传统文档中编辑页眉或页脚时,会出现用于插入、导航、首页/奇偶页选项和位置设置的上下文 Ribbon。可插入当前页码、总页数以及本地化日期和时间。页码字段按各个渲染页面显示对应值。插入日期/时间时,勾选自动更新会保存为字段,取消勾选则插入固定文本。日期/时间字段在打开文档或执行“更新字段”时刷新,不会作为时钟持续走动。现代文档不使用分页页眉页脚。
文档大纲
左侧大纲用于跳转到标题,不会在正文中插入目录。省略 toc 时,现代文档默认开启,传统文档默认关闭;显式设置 true 或 false 可覆盖默认值。空间不足或表格与大纲重叠时,面板会收起,空间恢复后重新展开。
将该选项合并到现有初始化配置中,不要重复注册同一插件。
import { UniverDocsUIPlugin } from '@univerjs/docs-ui'univer.registerPlugin(UniverDocsUIPlugin, { toc: true })import { UniverDocsCorePreset } from '@univerjs/preset-docs-core'import { createUniver } from '@univerjs/presets'const { univerAPI } = createUniver({ presets: [UniverDocsCorePreset({ container: 'app', toc: true })],})标题折叠
现代文档(documentStyle.documentFlavor: DocumentFlavor.MODERN)会在具有章节内容的一级至五级标题旁显示三角按钮。折叠后保留标题,隐藏其后直到下一个同级或更高级标题之前的内容,包括子标题、表格和图片。每个表格单元格和现代文档分栏都有独立的标题层级。
标题折叠不受 toc 控制。传统文档和嵌入式文本编辑器不显示折叠控件。展开父标题时,子标题会保留各自的折叠状态。
标题折叠示意
先折叠子标题,再折叠并展开父标题,子章节会保持折叠。
标题将文字、表格和图片组织为章节。
折叠状态随文档保存,并与协作者共享。
导出与复用
同级标题开始新的章节,不受上一章节折叠的影响。
IParagraph.headingCollapsed 随 Univer 快照保存,仅 true 表示折叠。正文内容仍在快照中,折叠支持撤销、重做和协同,并与其他编辑者共享。隐藏内容中的选区会移到可见标题。该约定不保证 Office 导入导出保留折叠状态。
通过代码修改时,使用文档 ID 和快照中稳定的 paragraphId 执行已注册的命令。设为 collapsed: false 可展开。
import { SetHeadingCollapsedCommand } from '@univerjs/docs'const changed = await univerAPI.executeCommand(SetHeadingCollapsedCommand.id, { unitId: documentId, paragraphId: headingParagraphId, collapsed: true,})状态未变或目标无效时,命令返回 false,例如传统文档、被祖先标题隐藏的标题、折叠空章节或无编辑权限。详见命令契约。
你觉得这篇文档如何?