跳转到内容

Svelte 查看器概览 ​

pptx-svelte-viewer 是用于 .pptx 文件的 Svelte 5 查看器和编辑器组件。其 <PowerPointViewer> 组件使用与 React、Vue、Angular 和原生 JavaScript 绑定相同的共享渲染逻辑及主题系统渲染 .pptx 幻灯片。解析引擎(pptx-viewer-core)和共享渲染层都打包在组件包中。

可以体验在线 Svelte 演示。

提供的能力 ​

能力说明
幻灯片渲染文本、形状、图片、组合、连接线、表格、图表、SmartArt(二维及可选三维)、媒体、墨迹、OLE,以及元素模型中的其他类型。
编辑通过 editable 启用插入、格式设置、组合、排列、拖动、缩放、旋转、富文本和备注、母版视图、撤销和重做,以及保存和下载。
导航适配桌面和移动端的响应式界面、缩略图栏、键盘导航和演讲者备注面板。
放映通过真实 Fullscreen API 进入全屏放映模式,支持切换效果、动画播放,以及带观众窗口的演示者视图。
导出PNG、PDF、GIF、WebM 视频、SVG、打印(幻灯片、讲义、备注、大纲),以及另存为 .pptx / .ppsx / .pptm。
协作可选的 Yjs 实时协同编辑,使用 y-websocket 或无服务器的 y-webrtc,包含在线状态、远程光标和共享或广播对话框。
自动保存编辑时提供 filePath,即可在 IndexedDB 中保存带防抖的崩溃恢复快照;宿主可通过 autosave={false} 禁用。
主题共享的 ViewerTheme 系统,使用 --pptx-* CSS 自定义属性,包含朱红色预设。参见主题。
国际化内置英文,可通过 pptx-svelte-viewer/i18n 注册更多语言。参见本地化。

元素覆盖范围

底层解析器的精确支持范围,以及采用近似处理的功能,请参见已知限制。

安装 ​

bash
npm i pptx-svelte-viewer

需要 svelte ^5 peer 依赖。核心引擎(pptx-viewer-core)和共享渲染层已经打包在内,引擎的运行时依赖(jszip、fast-xml-parser)会随组件包自动安装。

两项功能具有可选依赖,仅在使用时需要安装:

bash
npm i three                    # opt-in 3D SmartArt and 3D chart renderers
npm i yjs y-websocket          # collaboration, server-based transport
npm i yjs y-webrtc             # collaboration, serverless peer-to-peer transport

导入样式表

与原生 JavaScript 绑定不同,Svelte 包不会在运行时注入样式。请在应用入口导入一次提取出的样式表:

ts
import 'pptx-svelte-viewer/styles.css';

仅提供 ESM

组件包只提供 ESM 构建。Svelte 5 客户端运行时仅支持 ESM,因此即使提供 CJS 产物,也无法成功通过 require() 加载。

简单示例 ​

svelte
<script lang="ts">
	import { PowerPointViewer } from 'pptx-svelte-viewer';
	import 'pptx-svelte-viewer/styles.css';

	let bytes = $state<Uint8Array | null>(null);

	async function onPick(e: Event) {
		const file = (e.target as HTMLInputElement).files?.[0];
		if (file) bytes = new Uint8Array(await file.arrayBuffer());
	}
</script>

<input type="file" accept=".pptx,.ppt" onchange={onPick} />
{#if bytes}
	<PowerPointViewer source={bytes} onload={({ slideCount }) => console.log(slideCount)} />
{/if}

主要导出 ​

导出项类型用途
PowerPointViewer组件查看器和编辑器组件。参见快速上手。
PowerPointViewerProps, ViewerLoadDetail类型属性和回调载荷。参见组件属性。
PowerPointViewerApi类型通过 bind:this 访问的命令式接口。参见实例 API。
ViewerTheme, ViewerThemeColors类型主题配置类型。参见主题。
vermilionLightTheme, vermilionDarkTheme常量内置的朱红色亮色和深色预设。
themeToCssVars, defaultCssVars函数将主题转换为 --pptx-* CSS 变量。
registerTranslations函数注册语言字典。参见本地化。
exportSlideToSvg, exportAllSlidesToSvg, ...函数独立 SVG 导出辅助函数。参见导出与打印。
CollaborationConfig, CollaborationRole类型实时协同编辑配置。参见实时协作。
getAutosaveSnapshot, listAutosaveSnapshots, ...函数供宿主驱动恢复流程的 IndexedDB 恢复存储辅助函数。
ExportPdfOptions, ExportGifOptions, ExportVideoOptions类型命令式导出方法的选项。参见导出与打印。

渲染方式:CSS 与 DOM ​

与此 monorepo 中所有绑定一样,幻灯片渲染为 CSS 定位的 HTML/SVG,通过 CSS transform 缩放,不绘制到 Canvas 上。文本在任意缩放下都保持可选中且清晰,屏幕阅读器也可以正常工作。相关取舍请参见已知限制。

下一步 ​

基于 Apache-2.0 许可证发布