275 lines
5.5 KiB
Markdown
275 lines
5.5 KiB
Markdown
# 快速参考指南
|
||
|
||
## 基本用法
|
||
|
||
### 1. 查看文档(最简单)
|
||
|
||
```dart
|
||
import 'package:yx_only_office_flutter/yx_only_office_flutter.dart';
|
||
|
||
YxOnlyOfficeViewer.create(
|
||
serverUrl: 'https://your-server.com',
|
||
fileUrl: 'https://example.com/document.docx',
|
||
mode: 'view',
|
||
)
|
||
```
|
||
|
||
### 2. 编辑文档
|
||
|
||
```dart
|
||
YxOnlyOfficeViewer.create(
|
||
serverUrl: 'https://your-server.com',
|
||
fileUrl: 'https://example.com/document.docx',
|
||
mode: 'edit',
|
||
user: OnlyOfficeUser(id: 'user1', name: '张三'),
|
||
)
|
||
```
|
||
|
||
### 3. 使用 JWT 签名
|
||
|
||
```dart
|
||
YxOnlyOfficeViewer.create(
|
||
serverUrl: 'https://your-server.com',
|
||
fileUrl: 'https://example.com/document.docx',
|
||
tokenFactory: OnlyOfficeJwtSigner('your-secret-key'),
|
||
)
|
||
```
|
||
|
||
## 常用配置
|
||
|
||
### 权限控制
|
||
|
||
```dart
|
||
YxOnlyOfficeViewer.create(
|
||
serverUrl: 'https://your-server.com',
|
||
fileUrl: 'https://example.com/document.docx',
|
||
allowDownload: true, // 允许下载
|
||
allowPrint: false, // 禁止打印
|
||
)
|
||
```
|
||
|
||
### UI 定制
|
||
|
||
```dart
|
||
YxOnlyOfficeViewer.create(
|
||
serverUrl: 'https://your-server.com',
|
||
fileUrl: 'https://example.com/document.docx',
|
||
customization: OnlyOfficeCustomization(
|
||
compactToolbar: true, // 紧凑工具栏
|
||
hideRightMenu: false, // 显示右侧菜单
|
||
hideLeftMenu: false, // 显示左侧菜单
|
||
),
|
||
)
|
||
```
|
||
|
||
### 用户信息
|
||
|
||
```dart
|
||
YxOnlyOfficeViewer.create(
|
||
serverUrl: 'https://your-server.com',
|
||
fileUrl: 'https://example.com/document.docx',
|
||
user: OnlyOfficeUser(
|
||
id: 'user123',
|
||
name: '张三',
|
||
email: 'zhangsan@example.com',
|
||
group: '开发部',
|
||
),
|
||
)
|
||
```
|
||
|
||
## 事件处理
|
||
|
||
### 基础事件
|
||
|
||
```dart
|
||
YxOnlyOfficeViewer.create(
|
||
serverUrl: 'https://your-server.com',
|
||
fileUrl: 'https://example.com/document.docx',
|
||
onError: (error) {
|
||
print('错误: $error');
|
||
},
|
||
onAppClose: () {
|
||
print('用户请求关闭');
|
||
},
|
||
)
|
||
```
|
||
|
||
### 编辑相关事件
|
||
|
||
```dart
|
||
YxOnlyOfficeViewer.create(
|
||
serverUrl: 'https://your-server.com',
|
||
fileUrl: 'https://example.com/document.docx',
|
||
mode: 'edit',
|
||
onDocumentStateChange: (data) {
|
||
final hasChanges = data == true;
|
||
print('文档${hasChanges ? "已修改" : "未修改"}');
|
||
},
|
||
onRequestSaveAs: (data) {
|
||
print('用户请求另存为: $data');
|
||
},
|
||
onRequestInsertImage: (data) {
|
||
print('用户请求插入图片');
|
||
// 打开图片选择器
|
||
},
|
||
)
|
||
```
|
||
|
||
### 通用事件处理
|
||
|
||
```dart
|
||
YxOnlyOfficeViewer.create(
|
||
serverUrl: 'https://your-server.com',
|
||
fileUrl: 'https://example.com/document.docx',
|
||
onEvent: (event, data) {
|
||
print('事件: $event, 数据: $data');
|
||
},
|
||
)
|
||
```
|
||
|
||
## 高级配置
|
||
|
||
### 手动构建配置
|
||
|
||
```dart
|
||
final config = OnlyOfficeConfigFactory.create(
|
||
fileUrl: 'https://example.com/document.docx',
|
||
mode: 'edit',
|
||
title: '我的文档.docx',
|
||
lang: 'zh-CN',
|
||
key: 'custom-document-key', // 自定义文档 key
|
||
user: OnlyOfficeUser(id: 'user1', name: '张三'),
|
||
customization: OnlyOfficeCustomization(
|
||
compactToolbar: true,
|
||
),
|
||
tokenFactory: OnlyOfficeJwtSigner('secret'),
|
||
);
|
||
|
||
YxOnlyOfficeViewer(
|
||
serverUrl: 'https://your-server.com',
|
||
config: config,
|
||
)
|
||
```
|
||
|
||
### 完全自定义配置
|
||
|
||
```dart
|
||
final document = OnlyOfficeDocument(
|
||
fileType: 'docx',
|
||
key: 'unique-key-123',
|
||
title: '文档标题.docx',
|
||
url: 'https://example.com/document.docx',
|
||
permissions: OnlyOfficePermissions(
|
||
edit: true,
|
||
download: true,
|
||
print: false,
|
||
review: true,
|
||
comment: true,
|
||
),
|
||
);
|
||
|
||
final editorConfig = OnlyOfficeEditorConfig(
|
||
mode: 'edit',
|
||
lang: 'zh-CN',
|
||
user: OnlyOfficeUser(id: 'user1', name: '张三'),
|
||
customization: OnlyOfficeCustomization(
|
||
compactToolbar: true,
|
||
),
|
||
);
|
||
|
||
final config = OnlyOfficeConfig(
|
||
document: document,
|
||
documentType: 'word',
|
||
editorConfig: editorConfig,
|
||
);
|
||
|
||
YxOnlyOfficeViewer(
|
||
serverUrl: 'https://your-server.com',
|
||
config: config,
|
||
)
|
||
```
|
||
|
||
## 支持的文档类型
|
||
|
||
| 类型 | documentType | 扩展名 |
|
||
|------|--------------|--------|
|
||
| 文字处理 | `word` | doc, docx, odt, rtf, txt, pdf 等 |
|
||
| 电子表格 | `cell` | xls, xlsx, ods, csv 等 |
|
||
| 演示文稿 | `slide` | ppt, pptx, odp 等 |
|
||
|
||
插件会自动根据文件扩展名识别文档类型。
|
||
|
||
## 常见问题速查
|
||
|
||
### Q: 如何判断文档是否被修改?
|
||
|
||
```dart
|
||
onDocumentStateChange: (data) {
|
||
final hasChanges = data == true;
|
||
if (hasChanges) {
|
||
// 显示"未保存"提示
|
||
}
|
||
}
|
||
```
|
||
|
||
### Q: 如何保存编辑后的文档?
|
||
|
||
方式 1:服务端回调(推荐)
|
||
```dart
|
||
OnlyOfficeEditorConfig(
|
||
callbackUrl: 'https://your-server.com/callback',
|
||
)
|
||
```
|
||
|
||
方式 2:客户端下载
|
||
```dart
|
||
onDownloadAs: (fileType, url) {
|
||
// 下载 url 指向的文档
|
||
}
|
||
```
|
||
|
||
### Q: 如何自定义加载动画?
|
||
|
||
```dart
|
||
YxOnlyOfficeViewer.create(
|
||
serverUrl: 'https://your-server.com',
|
||
fileUrl: 'https://example.com/document.docx',
|
||
loadingBuilder: (context) {
|
||
return Center(
|
||
child: CircularProgressIndicator(),
|
||
);
|
||
},
|
||
)
|
||
```
|
||
|
||
### Q: 如何处理错误?
|
||
|
||
```dart
|
||
YxOnlyOfficeViewer.create(
|
||
serverUrl: 'https://your-server.com',
|
||
fileUrl: 'https://example.com/document.docx',
|
||
onError: (error) {
|
||
// 显示错误提示
|
||
ScaffoldMessenger.of(context).showSnackBar(
|
||
SnackBar(content: Text('错误: $error')),
|
||
);
|
||
},
|
||
errorBuilder: (context, error) {
|
||
return Center(
|
||
child: Text('加载失败: $error'),
|
||
);
|
||
},
|
||
)
|
||
```
|
||
|
||
## 完整示例
|
||
|
||
查看 `example/lib/main.dart` 获取完整的可运行示例。
|
||
|
||
## 更多信息
|
||
|
||
- [完整 README](../README.md)
|
||
- [ONLYOFFICE 官方文档](https://api.onlyoffice.com/docs/docs-api/)
|
||
- [示例说明](example/README.md)
|
||
|