@ betteroffice/ pptx (英语)
无框架的PPTX通过Rust/WebAssembly引擎解析,编辑,渲染并保存. 使用它用自己的接口构建演示文稿查看器或编辑器.
安装
bun add @betteroffice/pptx
无对等依存.
使用量
将演示文稿的第一个幻灯片映入浏览器画布 :
import {
initWasm,
openPresentation,
paintSlide,
sizeCanvasForSlide,
} from '@betteroffice/pptx';
export async function renderFirstSlide(
bytes: Uint8Array,
fontBytes: Uint8Array,
canvas: HTMLCanvasElement,
) {
await initWasm();
const deck = openPresentation(bytes, {
fonts: [{ family: 'My Sans', bytes: fontBytes }],
});
try {
const frame = deck.layoutSlide(0);
const dpr = window.devicePixelRatio;
sizeCanvasForSlide(canvas, frame, dpr);
const context = canvas.getContext('2d');
if (!context) throw new Error('Canvas 2D is unavailable');
await paintSlide(context, frame, dpr);
} finally {
deck.dispose();
}
}
fontBytes 持有 TTF 或 OTF 文件, 例如从您的服务器获取或装入
loadBundledFontBytes 从 @betteroffice/fonts。包含图像的幻灯片也需要图像解析器,描述
见下文。 反应编辑器在 @betteroffice/pptx-react
管理渲染和用户输入.
入境点
以下所有入境点均从 @betteroffice/pptx。 。 。 .
| 进入点 | 说明 |
|---|---|
initWasm(input?) | 在打开或检查文件前初始化 Web Assembly 。 浏览器可以省略输入;节点主机可以通过WASM字节. |
openPresentation(bytes, options?) | 打开同步 PresentationHandle 用于读取、编辑、布局和保存. |
inspectPresentation(bytes, options?) | 在不打开编辑手柄的情况下检查解析内容; includeMedia: false 省略媒体. |
sizeCanvasForSlide(canvas, frame, dpr, scale?) | 设置画布支持维度和 CSS 大小用于幻灯片 . |
paintSlide(context, frame, dpr?, scale?, options?) | 在画布上同步绘制显示列表 . |
slideToPng(frame, options?) | 返回一个巴布亚新几内亚 Blob 同步使用浏览器画布后端. |
exportPptxStructured(bytes, options?) | 将结构化内容同步导出, 不使用字体或 DOM . |
exportPptxMarkdown(bytes, options?) | 导出 Markdown 和源锁定同步 . |
renderPptxMarkdown(content, options?) | 作为Markdown的同步结构化内容. |
openPresentationSession(bytes, options?) 从 @betteroffice/pptx/worker 打开一个实验同步
工人会议.
openPresentation 接受 fonts, (中文(简体) ), fallbackFonts, (中文(简体) ), clientId,以及 initialUpdate后退字体
提供从跑步中消失的格言 从协作更新打开时,保留
源文件字节用来种子它,以便手柄可以保存.
核心直接拥有的手柄是同步的. React 编辑器在 Web Worker 中运行引擎 并暴露了承诺的回报 读取和出口.
布局和渲染
layoutSlide(index) 使用基于零的幻灯片索引. snapshot() 返回甲板模型,以及
layouts() 列表布局编号和名称 insertSlide。 。 。 . duplicateSlide 复制幻灯片内容和
发言者注意到,不包括评论。 形状坐标使用EMU(英语:Metric Units,每英寸914,400;文本抵消使用)
UTF-16 代码单元.
对于嵌入式图像, 通过 paintSlide 选项对象 resolveImage,函数映射
资产 ID 到画布图像源 或对它的承诺 。 它会回来 null 用于不可用图像.
slideToPng 接受相同的解析器和可选 scale。 。 。 .
储蓄和所有权
save() 返回已应用编辑的 PPTX 字节;未操作的幻灯片保留其源部分字节.
打电话 dispose() 当完成一个手柄. fork() 创建必须拥有的独立副本
亦将作处置.
代理提案
propose(agentId, note, edits) 级编辑而不修改承诺的甲板。 使用 listProposals, (中文(简体) ),
previewProposal,以及 layoutProposalSlide 然后检查他们 acceptProposal 或者说 rejectProposal。 。 。 .
接受以一个倒数步骤适用集团;待决提案留在公开会议上.
layoutProposalDiffSlide 返回审查框架,并 textChanges; 将两者传递给 paintSlide 显示
插入和删除。 审查框架载有临时文本,仅供显示.
如果目标改变, 接受投放 StaleProposalError; 在选择前检查新预览
acceptProposal(id, { force: true })。 。 。 .
版本已检查的编辑批次
readContent, (中文(简体) ), findText, (中文(简体) ), validateEdits,以及 applyEdits 支持根据会话版本编辑.
见 在版本检查的批次中编辑 PPTX
对于请求形状、原子性、拒绝和限制.
有结构的出口
exportStructured 财务报告和审定财务报表 exportMarkdown 读取承诺状态; 无头导出接受文件字节.
见 PPTX 结构导出
选择、锚地、诊断和截断.
评论和历史
comments() 列出评论意见. setCommentFlavor 选择 legacy 或者说 modern 仅在该列表是
空无相. replyToComment 支持两种口味; setCommentStatus 需要现代评论. addComment 带走作者的
名称、文本和呼叫者提供 created 时间戳. setCommentPosition 使用
安全整数 EMU 坐标; 回复分享其根的位置 .
setUndoCaptureMode('manual') 组跟踪本地编辑直到 addUndoBoundary()· ;
undoCaptureMode() 读取当前模式. undo() 财务报告和审定财务报表 redo() 导航历史.
anchorCaret(storyId, index) 创建跟踪编辑的锚; resolveCaretAnchor 返回其
(单位:千美元) null 如果它的故事不再存在.
协作
PresentationHandle 执行复制界面 CollaborationProvider
从 @betteroffice/pptx/collaboration。 。 。 .
见 协作指南 用于运输,
共享种子、存在和连接生命周期.
操作简介
layoutSlideProfiled, (中文(简体) ), insertTextProfiled,以及 undoProfiled 揭露出发动机舞台时间.
见 操作简介 结果
形状和测量指导.