@ betteroffice/ docx (英语)
无框架 DOCX 解析、序列化、 CRDT 编辑、布局和画布渲染 Rust/Web Assembly. (原始内容存档于2018-09-29). 用于文档处理或自定义编辑器适配器.
安装
bun add @betteroffice/docx
@betteroffice/fonts 是字体资产的可选对等依赖.
使用量
解析一个 DOCX 并保存它,同时保存未受影响的软件包部件 :
import { readFile, writeFile } from 'node:fs/promises';
import { parseDocx, repackDocx } from '@betteroffice/docx';
const document = await parseDocx(await readFile('input.docx'));
// document.package.document.content: the body's paragraphs and tables
// document.package also holds styles, numbering, theme, media, headers and footers
const bytes = await repackDocx(document);
await writeFile('output.docx', new Uint8Array(bytes));
入境点
| 进入点 | 说明 |
|---|---|
parseDocx | 读取 ArrayBuffer, (中文(简体) ), Uint8Array, (中文(简体) ), Blob,或 File 输入文档模式. |
repackDocx, (中文(简体) ), repackDocxWithWarnings | 将一个解析过的模型保存在原软件包上;后者也返回保存警告. |
createDocx | 写入新的文档模型,而不包含原始的软件包. |
createYrsSession (从) @betteroffice/docx/yrs(中文(简体) ) | 同步创建 CRDT 编辑会话 . |
saveYrsDocx (从) @betteroffice/docx/yrs(中文(简体) ) | 保存 DOCX 字节打开的会话, 返回字节并坚持段落锚地 . |
用于反应编辑器和查看器
@betteroffice/docx-react。 。 。 .
运行时间和资产
包装容器、解析器、布局和编辑WebAssembly资产 dist/generated/。 。 。 .
Async 切入点加载所需的资产; 解析或解析不需要手动初始化
创建会话。 为浏览器捆绑时保存被包装的资产 URL .
核心会话在同步创建后暴露出同步编辑和阅读方法. 反应
编辑器默认在Web Worker中运行其引擎,并曝光承诺返回文档读取,
编辑和导出。 发布直接会话与 session.destroy() 当完成.
撤销分组
故事是一出文字流:正文:正文,正文或页脚,脚注,或注释.
session.setUndoCaptureMode(mode) 选择本地交易组合为撤消步骤;
session.undoCaptureMode() 读取模式。 打电话 session.beginUndoCapture() 导入或播种后.
| 模式 | 分组 |
|---|---|
auto (默认) | 相近编辑会合;切换故事会关闭组. |
manual | 编辑到一个明确的边界,包括跨故事. |
session.addUndoBoundary() 关闭当前组。 更改模式同时关闭它
历史; 设置相同的模式。 在手动模式下,在不相关的编辑之前关闭组.
远程交易停留在本地撤消历史之外; 编辑批次提供原子执行 .
选择状态
session.selectionContext(range) 通过段落选择格式化的汇总.
切换格式为 true, (中文(简体) ), false,或 'mixed'; 数值格式化为 null 缺席时或
不统一。 使用此状态来驱动自定义格式化控制 .
主办提案
session.proposeChanges({ expectVersion, proposals }) 应用经过版本检查的跟踪回合
按主机提议编号分组的更改, 取消历史 。 每项提案均列明其 id目标
paragraph,一个 op (单位:千美元)replaceText 或者说 insertText和 suggest: { author, date } 用于归属.
拒绝则使回合无效.
session.setProposalStates({ expectVersion, expectPreviewVersion, changes }) 如何改变提案
预览时不修改文档或取消历史. session.withdrawProposals({ expectVersion, ids }) 将已接受的提案作为纯文本予以解决,并删除被否决或未作出决定的提案,因此稍后
回合搜索预览显示的文本.
以 session.getProposals() 或用它观察 session.onProposalChange()。 。 。 .
打开另一份文件即可清除登记册。 使用 proposalRevisionPreview(snapshot) 从
@betteroffice/docx/yrs 作为布局使环境 revisionPreview 以显示决定.
注释范围
session.setCommentRanges(commentId, ranges) 替换当前注释的粘性锚地,同时
保存其元数据。 范围可能跨越段落或涉及单独的故事;每个故事必须是
非空地、命令和在现有段落之内。 更改注释前无效的输入抛出 .
Reanchoring 加入本地的反捕捉. saveYrsDocx(session) 写入当前区域; 主机
删除所有被评论的文本必须选择存活区域或删除注释.
编辑批次
随会话版本读取目标,然后在解剖学上针对该版本应用所有步骤. 见 版本检查过的 DOCX 批次 用于操作、抵销、限制和打出拒绝.
段落锁定
会话段落键确定协作会话中的段落; 持续锚点确定 按包件部分和OOXML段落ID保存段落。 见 DOCX 段落锁定 用于保存、重新打开、解析和分配身份证.
有结构的出口
对于 exportDocxStructured 财务报告和审定财务报表 exportDocxMarkdown,参见
结构化内容
用于锁定 JSON 或 Markdown , 修改视图, 故事选择和现场会话导出 .
对于 exportDocxStructuredWithPages,参见
页面碎片 用于字体要求,
布局图,和页几何.
折旧: collectHeadings 从 @betteroffice/docx/utils; 使用 session.headings(story) 换句话说.
内容控制
listDocxContentControls 财务报告和审定财务报表 findDocxContentControls 检查 DOCX 字节中的控制 .
见 内容控制
用于会话发现、版本检查填充以及支持的控制类型.
比较文档
compareDocx 比较两个 DOCX 文件并返回跟踪文本更改或诊断.
见 DOCX 比较
用于支持输入、归属和拒绝行为.
协作
CollaborationProvider 从 @betteroffice/docx/collaboration 将复制件连接到二进制
运输。 见 协作指南
用于共享国家,运输线路,检查站和部署.
编辑器插件
对反应主机扩展名,请使用 DOCX 插件 API。 。 。 .
折旧: EditorPluginCore, (中文(简体) ), PluginPanelProps, (中文(简体) ), PanelConfig,以及 SidebarItemContext 从
@betteroffice/docx/plugin-api; 使用 defineDocxPlugin 财务报告和审定财务报表 plugins 从 @betteroffice/docx-react。 。 。 .
自定义适配器的字体
见 字体设置 可选计量资产.
对于浏览器字体加载, createFontLoadScope() 从 @betteroffice/docx/utils 分别隔离
编辑器的负载通知 . registerDocumentFaces(faces, scope) 嵌入式相片和
当文档在同一姓氏下使用不同的字节时,返回他们的 CSS 家庭别名.
打开范围 scope.dispose() 当编辑器被删除的时候.