# file-online-preview **Repository Path**: hepingmogul/file-online-preview ## Basic Information - **Project Name**: file-online-preview - **Description**: file-online-preview - **Primary Language**: TypeScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-20 - **Last Updated**: 2026-08-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # file-online-preview 浏览器端 **PPTX 在线预览** 单体仓库(pnpm monorepo)。在 Web Worker 中解析 `.pptx`,再由 Vue 3 组件渲染幻灯片,支持文本、形状、图片、表格、图表、SmartArt、公式等常见元素。 [English](./README.en.md) ## 特性 - **纯前端解析**:基于 JSZip + XML 解析,无需服务端转换 - **Worker 多线程**:`parsePPTXInWorker` 避免大文件阻塞主线程 - **高保真渲染**:填充、边框、阴影、旋转、主题色、字体样式等 - **图表**:柱状 / 折线 / 饼图 / 面积 / 散点 / 雷达等(D3) - **交互预览**:缩略图侧栏、翻页、缩放、全屏、键盘导航 - **本地调试**:开发环境可从 `public/pptx` 快速切换示例文件 ## 软件架构 ```text file-online-preview/ ├── apps/ │ └── web-vue/ # Vue 3 演示应用(Vite + Tailwind + Less) │ └── src/ │ ├── views/ # 上传 / 拖拽入口页 │ └── components/ │ └── pptx-viewer/ # 幻灯片与图表渲染 ├── packages/ │ ├── ppt-parser/ # 二进制 .ppt(97–2003)Rust/WASM 解析引擎 │ ├── pptx/ # PPTX 解析库(主线程 / Worker) │ ├── core/ # 通用核心逻辑 │ └── utils/ # 工具函数 ├── docs/ # 项目文档与规范 └── tmp/ # 本地临时文件(默认不入库) ``` **数据流简述:** 1. 用户上传 / 拖入 / 选择 `.pptx` 2. `@file-online-preview/pptx` 在 Worker 中解压并解析幻灯片结构 3. 返回 `PPTXResult`(幻灯片列表、主题色、画布尺寸、字体等) 4. `PPTXViewer` → `PPTXSlide` → `PPTXElementNode` 按元素类型渲染 | 包名 | 说明 | |------|------| | `@file-online-preview/ppt-parser` | 二进制 `.ppt` Rust/WASM 解析引擎 | | `@file-online-preview/pptx` | 解析入口:`parsePPTX` / `parsePPTXInWorker` | | `@file-online-preview/web-vue` | 在线预览演示站 | | `@file-online-preview/core` | 核心辅助逻辑 | | `@file-online-preview/utils` | 通用工具 | ## 环境要求 - Node.js 18+ - [pnpm](https://pnpm.io/) 9+ ## 安装与运行 ```bash # 克隆仓库后安装依赖 pnpm install # 启动演示应用(默认 http://localhost:3000) pnpm dev # 构建全部包与应用 pnpm build # 编译二进制 PPT 的 Rust WASM 并同步到 web-vue vendor(需 Rust + wasm-pack) pnpm build:ppt-wasm # 预览生产构建(在 apps/web-vue 下) pnpm --filter @file-online-preview/web-vue preview ``` 二进制 `.ppt`(97–2003)预览:开发服务启动后打开 `/ppt`,解析在 Web Worker 中调用 `ppt-parser` WASM。计划与阶段说明见 `docs/ppt/rewrite/`。 ## 使用说明 ### 演示应用 1. 执行 `pnpm dev` 打开页面 2. 点击「上传 PPTX」,或将文件拖到上传区 3. 使用侧栏缩略图、翻页、缩放与全屏查看 开发模式下,页头可切换 `apps/web-vue/public/pptx/` 中的本地示例;生产构建会排除该目录,避免把调试文件打进产物。 ### 在代码中解析 PPTX ```ts import { parsePPTX, parsePPTXInWorker } from '@file-online-preview/pptx' // 主线程 const result = await parsePPTX(file, { imageMode: 'base64', videoMode: 'none', audioMode: 'none', }) // Web Worker(推荐,避免卡顿) const result = await parsePPTXInWorker(file) ``` 解析结果主要字段: | 字段 | 含义 | |------|------| | `slides` | 幻灯片及元素列表 | | `themeColors` | 主题色 | | `usedFonts` | 用到的字体 | | `size` | 幻灯片宽高 | 支持的元素类型包括:`text`、`image`、`shape`、`table`、`chart`、`video`、`audio`、`diagram`、`math`、`group`。 ### 在 Vue 中嵌入预览器 ```vue ``` `src` 可为 `File`、远程 / 本地 URL 字符串。 ## 开发约定 - 计划类文档:`docs/plans/` - 通用文档:`docs/` - 代码规范:`docs/rules/` - 临时调试产物:统一放在仓库根目录 `tmp/<你的标识>/`,详见 [`tmp/README.md`](./tmp/README.md) ## 参与贡献 1. Fork 本仓库 2. 新建功能分支(如 `feat/xxx`) 3. 提交变更 4. 发起 Pull Request ## 许可证 请以仓库内实际许可证文件为准;若尚未添加,贡献前请与维护者确认。 ## 参考网站 - File Viewer https://file-viewer.app/