Skip to content

开源版本 ​

Slim Office 是开源发布。演示部分在仓库的 present/ 目录。它可以打开 .pptx,在浏览器里编辑和放映,再写出 .pptx、HTML、PDF 或 PNG。

许可证是 AGPL-3.0-or-later。版权人是 Sliiu Inc。闭源嵌入需要商业授权,见该仓库的 COMMERCIAL.md,或邮件 support@slimppt.com。

账号、在线分享、在线存储、直播放映、协作和本站提供的模型不在这些包里。

安装 ​

要做的事包
读 .pptx@sliiu/present-parser
写 .pptx@sliiu/present-serializer
放映,或导出 HTML / PDF / PNG@sliiu/present-player
编辑@sliiu/present-editor
放映插件@sliiu/present-plugin-sdk
自备密钥调用模型@sliiu/present-ai

只放映时安装 player。editor 会同时装上文字识别、OpenCV 和公式渲染。

bash
npm install @sliiu/present-parser @sliiu/present-player @sliiu/present-editor

每个入口都带 TypeScript 类型、ESM import 和 CommonJS require。

读写文件 ​

parsePptx 接受 ArrayBuffer、Uint8Array、Blob 或 File。加密文件和旧版 .ppt 会拒绝。writePptx 返回 .pptx 字节。

ts
import { parsePptx } from "@sliiu/present-parser";
import { writePptx } from "@sliiu/present-serializer";

const pres = await parsePptx(await file.arrayBuffer());
const pptx = writePptx(pres);
js
const { parsePptx } = require("@sliiu/present-parser");

放映和编辑 ​

在打包进页面之后,挂到已有的元素上。mount 和 mountEditor 接收解析后的演示文稿,不接收原始文件。

ts
import { mount } from "@sliiu/present-player";
import { mountEditor } from "@sliiu/present-editor";

mount(stage, pres);
mountEditor(editor, pres);

PDF 和 PNG 在浏览器里生成。exportPresentationPdf 返回一份 PDF Blob。snapshotAll 按页返回 PNG Blob。

ts
import { exportPresentationPdf, snapshotAll } from "@sliiu/present-player";

const pdf = await exportPresentationPdf(pres);
const slides = await snapshotAll(pres);

普通 HTML 页面 ​

dist/player.iife.js 用普通 script 引入。全局名是 PPTPlayer。

html
<script src="node_modules/@sliiu/present-player/dist/player.iife.js"></script>
<script>
  PPTPlayer.mount(document.querySelector("#stage"), presentation);
</script>

插件文件是 dist/plugin-sdk.iife.js,全局名 PPTPluginSDK。放映脚本里已经有 PPTPlayer.definePlugin。

要写出一份单独的 HTML,把 player.iife.js 的文本交给 buildHtml:

ts
import { readFileSync } from "node:fs";
import { buildHtml } from "@sliiu/present-player/export";

const playerScript = readFileSync(
  "node_modules/@sliiu/present-player/dist/player.iife.js",
  "utf8",
);
const html = buildHtml(pres, playerScript, { title: "Deck" });

buildHtmlBundle 写出 HTML 和 assets/ 目录,而不是单文件。

其他入口 ​

路径用途
@sliiu/present-player/exportbuildHtml、buildHtmlBundle
@sliiu/present-player/iife浏览器单文件
@sliiu/present-serializer/source-json原始压缩包的 JSON 形式
@sliiu/present-editor/commands编辑命令
@sliiu/present-ai/config自备密钥的配置
@sliiu/present-ui/tokens.css界面变量
@sliiu/present-plugin-sdk/iife插件单文件
ts
import { definePlugin } from "@sliiu/present-plugin-sdk";
import { defaultConfig, parseConfig } from "@sliiu/present-ai/config";

definePlugin 检查 id 和 activate。在浏览器里,它会把插件登记给下一次 PPTPlayer.mount。

包 ​

@sliiu/present-player 和 @sliiu/present-editor 会装上它们依赖的包。要直接调用某一层时,再单独安装。

包作用
@sliiu/present-animation页内动画的时间线和缓动
@sliiu/present-core幻灯片、形状和颜色的数据结构
@sliiu/present-parser读 .pptx
@sliiu/present-serializer写 .pptx
@sliiu/present-three-bake把立体形状准备成渲染器用的场景
@sliiu/present-renderer把幻灯片画到 SVG、Canvas 或 WebGL
@sliiu/present-transition-fx翻页切换和 Morph
@sliiu/present-plugin-sdk放映插件
@sliiu/present-themes主题、配色和装饰
@sliiu/present-ui界面变量和控件。样式文件是 tokens.css
@sliiu/present-player放映,以及 HTML / PDF / PNG
@sliiu/present-editor编辑界面
@sliiu/present-ai自备密钥调用模型

视频导出时,浏览器从 unpkg 加载 @ffmpeg/core。这段是 GPL-2.0-or-later,不在商业授权里。其余第三方许可证见仓库里的 THIRD-PARTY-NOTICES.md。