一个本地运行的网站,可以将 PowerPoint (.pptx) 文件转换为精美的预览图。
- 📤 支持拖拽上传 PPT 文件
- 📦 支持批量转换(多文件上传)
- 🖼️ 自动提取所有幻灯片
- 🎨 智能布局:顶部封面大图 + 3列网格预览
- ⬇️ 一键下载高清预览图
- 🚀 本地运行,数据安全
生成的预览图包含:
- 顶部:第一张幻灯片(封面)大图展示
- 下方:所有幻灯片的3列网格缩略图
- Node.js (推荐 v18+)
- LibreOffice - 用于 PPT 转图片
macOS:
brew install --cask libreofficeUbuntu/Debian:
sudo apt install libreofficeWindows: 从 libreoffice.org 下载安装
# 安装前端依赖
cd frontend
npm install
# 安装后端依赖
cd ../backend
npm install方式一:使用启动脚本(推荐)
./start.sh方式二:手动启动
终端1 - 启动后端:
cd backend
npm run dev终端2 - 启动前端:
cd frontend
npm run dev打开浏览器访问:http://localhost:5173
ppt2preview/
├── frontend/ # React + Vite 前端
│ ├── src/
│ │ ├── App.tsx # 主应用组件
│ │ └── index.css # 样式文件
│ └── package.json
├── backend/ # Express 后端
│ ├── src/
│ │ ├── index.ts # 服务入口
│ │ ├── routes/ # API 路由
│ │ └── services/ # 业务逻辑
│ │ ├── pptProcessor.ts # PPT 处理
│ │ └── taskManager.ts # 任务管理
│ └── package.json
├── uploads/ # 上传文件临时目录
├── output/ # 生成图片输出目录
└── start.sh # 一键启动脚本
上传 PPT 文件
请求: multipart/form-data
file: .pptx 文件
响应:
{
"success": true,
"taskId": "uuid",
"message": "文件上传成功,正在处理"
}查询处理状态
响应:
{
"status": "completed",
"result": {
"previewUrl": "/output/xxx-preview.png",
"coverUrl": "/output/xxx-cover.png",
"slides": [...],
"totalCount": 10
}
}- React 18
- TypeScript
- Tailwind CSS
- Vite
- Express
- TypeScript
- Multer (文件上传)
- Sharp (图片处理)
- LibreOffice (PPT 转换)
ISC
为避免 output/、uploads/ 长期堆积占用磁盘,后端默认会按 TTL 定期清理旧文件。
OUTPUT_TTL_MINUTES:文件保留分钟数,默认60OUTPUT_CLEAN_INTERVAL_MINUTES:清理间隔分钟数,默认10OUTPUT_CLEAR_ON_START:是否启动时直接清空output/与uploads/,默认falseTASK_CONCURRENCY:转换任务并发数(批量上传会排队执行),默认2
前端在批量任务全部完成后,可一键打包下载 ZIP(每个 PPT 对应一张合成预览图)。
后端接口:
GET /download/zip?taskIds=...:taskIds用逗号分隔,例如a,b,c