# uni pdf
**Repository Path**: TonyQ/uni-pdf
## Basic Information
- **Project Name**: uni pdf
- **Description**: uni app android 加载 pdf
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-04-26
- **Last Updated**: 2025-04-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 移动端-H5-小程序在线预览pdf,图片,视频
## 项目概述
本项目是一个基于uni-app开发的多端文件预览解决方案,支持在移动端、H5和小程序环境下预览PDF文档、图片和视频文件。项目使用了ss-preview组件,该组件封装了不同平台下文件预览的实现方式,提供了统一的接口,简化了开发流程。
## 功能特点
- **多种文件格式支持**:支持预览PDF文档、图片(单张/多张)和视频文件
- **多平台兼容**:支持App、H5和微信小程序等多个平台
- **简单易用**:提供统一的组件接口,使用方便
- **灵活扩展**:可通过服务端转换实现对doc、docx、xls、xlsx等其他格式文档的预览
- **完整示例**:包含完整的使用示例和代码参考
## 安装说明
### 方式一:使用HBuilderX导入
1. 在HBuilderX中点击菜单栏的`插件`->`uni-app插件市场`->`找插件`
2. 搜索`ss-preview`,找到`移动端-H5-小程序在线预览pdf,图片,视频`插件
3. 点击`使用HBuilderX导入插件`,选择要导入的项目
### 方式二:下载插件ZIP
1. 从插件市场下载`ss-preview`插件ZIP包
2. 解压后复制到项目的`uni_modules`目录下
> **注意**:uni_modules必须在项目根目录下,如果在src目录下,需要修改路径配置。
## 使用方法
### 基本用法
1. 创建预览页面(如`preview.vue`):
```vue
```
2. 在列表页面(如`index.vue`)中调用预览页面:
```vue
uni-app预览文件
{{item.src}}
```
## 组件参数说明
| 属性 | 是否必填 | 值类型 | 默认值 | 说明 |
| --------- | -------- | ------- | ------ | ----------------------------------------- |
| fileUrl | 否 | String | 空 | 预览单个文档或视频传递url |
| fileType | 是 | String | 空 | 类型(1.预览图片,2.预览文件,3.预览视频)|
| imageList | 否 | Array | 空数组 | 预览单个或多个图片传递数组 |
## 平台兼容性说明
### App端
- 支持预览PDF文档、图片和视频
- 预览视频需在`manifest.json`的App模块配置中勾选VideoPlayer(视频播放)
- PDF文档预览使用内置的PDF阅读器
### H5端
- 完全支持预览PDF文档、图片和视频
- PDF文档预览使用内置的PDF阅读器
### 微信小程序
- 支持预览图片和视频
- PDF文档预览通过微信官方方法`uni.downloadFile`下载成功后,使用`uni.openDocument`打开
## 特别说明
### PDF文件处理
1. **普通PDF文件**:直接通过URL加载
2. **Base64编码的PDF**:组件内部会自动处理,无需额外操作
### 其他格式文档预览
对于doc、docx、xls、xlsx等其他格式文档,可通过服务端转换为PDF文件流实现预览:
```javascript
// 示例:通过服务端接口转换文档格式
let types = fileUrl.substr(fileUrl.lastIndexOf('.'));
if(types !== '.pdf'){
this.fileUrl = `https://your-convert-api.com?file=${encodeURIComponent(fileUrl)}`
}
```
## 注意事项
1. **uni_modules目录位置**:必须在项目根目录下,如果在src目录下,需要修改路径:
```javascript
// 修改前
/uni_modules/ss-preview/hybrid/html/pdf-reader/index.html?file=${encodeURIComponent(value)}
// 修改后
/src/uni_modules/ss-preview/hybrid/html/pdf-reader/index.html?file=${encodeURIComponent(value)}
```
2. **不支持vite打包**
3. **视频组件说明**:预览视频也可以直接使用video标签,但video为原生组件,层级较高,在APP滑动的界面可能会产生兼容性问题
4. **图片预览替代方案**:也可以使用uni-app的方法`uni.previewImage`实现预览
## 常见问题
### 文件加载失败
如果出现类似以下错误:
```
Fetch API cannot load file:///storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/HBuilder/www/uni_modules/ss-preview/hybrid/html/pdf-reader/...
```
可能的原因:
1. 文件路径不正确
2. 文件格式不支持
3. Base64编码的PDF文件格式不正确
解决方案:
- 检查文件URL是否正确
- 确保文件格式受支持
- 对于Base64编码的PDF,确保编码格式正确
### 如果只使用 hybrid 则不能放在uni_modules中,需要移动到static文件夹下,这时候的引入路径则改为 /static/hybrid/html/pdf-reader/index.html?
## 项目结构
```
├── uni_modules/ss-preview/ # 预览组件目录
│ ├── components/ # 组件目录
│ │ └── ss-preview/ # 预览组件
│ │ └── ss-preview.vue # 预览组件实现
│ ├── hybrid/ # 混合开发目录
│ │ └── html/ # HTML目录
│ │ ├── pdf-reader/ # PDF阅读器
│ │ │ ├── index.html # PDF阅读器入口
│ │ │ ├── viewer.js # PDF阅读器实现
│ │ │ └── ... # 其他PDF阅读器文件
│ │ └── pdf.html # PDF预览HTML
│ ├── package.json # 组件配置
│ └── readme.md # 组件说明
├── pages/ # 页面目录
│ ├── index.vue # 首页(文件列表)
│ └── preview.vue # 预览页面
├── App.vue # 应用入口组件
├── main.js # 应用入口JS
├── manifest.json # 应用配置
└── pages.json # 页面配置
```