@builder6/onlyoffice 3.2.1 → 3.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -1,12 +1,334 @@
|
|
|
1
|
-
OnlyOffice Module
|
|
2
|
-
===
|
|
1
|
+
# Builder6 OnlyOffice Module
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
Builder6 OnlyOffice 模块为 Builder6 平台提供 OnlyOffice 文档编辑器集成,支持在线协作编辑 Word、Excel、PowerPoint 等 Office 文档。
|
|
5
4
|
|
|
6
|
-
##
|
|
5
|
+
## 功能特性
|
|
7
6
|
|
|
7
|
+
- **在线文档编辑**: 支持 Word、Excel、PowerPoint 文档在线编辑
|
|
8
|
+
- **实时协作**: 多用户同时编辑同一文档
|
|
9
|
+
- **文档预览**: 支持各种文档格式的在线预览
|
|
10
|
+
- **水印支持**: 可配置的文档编辑水印
|
|
11
|
+
- **JWT 安全**: 使用 JWT 令牌保护文档编辑会话
|
|
12
|
+
- **回调处理**: 处理文档保存和编辑状态回调
|
|
13
|
+
- **权限控制**: 灵活的文档访问和编辑权限配置
|
|
14
|
+
- **版本管理**: 支持文档版本历史记录
|
|
15
|
+
|
|
16
|
+
## 安装
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @builder6/onlyoffice
|
|
8
20
|
```
|
|
9
|
-
|
|
21
|
+
|
|
22
|
+
或
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
yarn add @builder6/onlyoffice
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## 环境变量
|
|
29
|
+
|
|
30
|
+
### 基本配置
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# 启用 OnlyOffice 集成
|
|
34
|
+
B6_ONLYOFFICE_ENABLED=true
|
|
35
|
+
|
|
36
|
+
# OnlyOffice Document Server URL
|
|
10
37
|
B6_ONLYOFFICE_URL=https://onlyoffice.steedos.cn
|
|
11
|
-
|
|
12
|
-
|
|
38
|
+
|
|
39
|
+
# JWT 密钥(用于安全通信)
|
|
40
|
+
B6_ONLYOFFICE_JWT_SECRET=your-secret-key
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 高级配置
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# 启用默认编辑水印
|
|
47
|
+
B6_ONLYOFFICE_WATERMARK_ENABLED=true
|
|
48
|
+
|
|
49
|
+
# 水印文本
|
|
50
|
+
B6_ONLYOFFICE_WATERMARK_TEXT=Confidential
|
|
51
|
+
|
|
52
|
+
# 水印透明度 (0-1)
|
|
53
|
+
B6_ONLYOFFICE_WATERMARK_OPACITY=0.5
|
|
54
|
+
|
|
55
|
+
# 允许的文档类型(逗号分隔)
|
|
56
|
+
B6_ONLYOFFICE_ALLOWED_TYPES=docx,xlsx,pptx,doc,xls,ppt
|
|
57
|
+
|
|
58
|
+
# 文档保存超时(秒)
|
|
59
|
+
B6_ONLYOFFICE_SAVE_TIMEOUT=60
|
|
60
|
+
|
|
61
|
+
# 回调 URL 前缀
|
|
62
|
+
B6_ONLYOFFICE_CALLBACK_URL_PREFIX=https://your-domain.com
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 使用示例
|
|
66
|
+
|
|
67
|
+
### 在 NestJS 应用中集成
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
import { Module } from '@nestjs/common';
|
|
71
|
+
import { OnlyOfficeModule } from '@builder6/onlyoffice';
|
|
72
|
+
|
|
73
|
+
@Module({
|
|
74
|
+
imports: [OnlyOfficeModule],
|
|
75
|
+
})
|
|
76
|
+
export class AppModule {}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 打开文档编辑器
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
import { OnlyOfficeService } from '@builder6/onlyoffice';
|
|
83
|
+
|
|
84
|
+
constructor(private onlyOfficeService: OnlyOfficeService) {}
|
|
85
|
+
|
|
86
|
+
async openDocument(fileId: string, userId: string) {
|
|
87
|
+
const config = await this.onlyOfficeService.getEditorConfig({
|
|
88
|
+
fileId,
|
|
89
|
+
userId,
|
|
90
|
+
mode: 'edit', // 'edit' 或 'view'
|
|
91
|
+
title: 'Document.docx',
|
|
92
|
+
fileType: 'docx',
|
|
93
|
+
callbackUrl: `https://your-domain.com/api/callback/${fileId}`
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
return config;
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 前端集成示例
|
|
101
|
+
|
|
102
|
+
```html
|
|
103
|
+
<!DOCTYPE html>
|
|
104
|
+
<html>
|
|
105
|
+
<head>
|
|
106
|
+
<title>OnlyOffice Editor</title>
|
|
107
|
+
<script type="text/javascript" src="https://onlyoffice.steedos.cn/web-apps/apps/api/documents/api.js"></script>
|
|
108
|
+
</head>
|
|
109
|
+
<body>
|
|
110
|
+
<div id="placeholder"></div>
|
|
111
|
+
<script type="text/javascript">
|
|
112
|
+
// 从后端获取配置
|
|
113
|
+
fetch('/api/v6/onlyoffice/config?fileId=123')
|
|
114
|
+
.then(res => res.json())
|
|
115
|
+
.then(config => {
|
|
116
|
+
new DocsAPI.DocEditor("placeholder", config);
|
|
117
|
+
});
|
|
118
|
+
</script>
|
|
119
|
+
</body>
|
|
120
|
+
</html>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### 处理文档保存回调
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
@Post('callback/:fileId')
|
|
127
|
+
async handleCallback(
|
|
128
|
+
@Param('fileId') fileId: string,
|
|
129
|
+
@Body() callbackData: any
|
|
130
|
+
) {
|
|
131
|
+
// status: 1-编辑中, 2-准备保存, 3-保存错误, 4-关闭无变化, 6-正在编辑, 7-强制保存错误
|
|
132
|
+
const { status, url, users, key } = callbackData;
|
|
133
|
+
|
|
134
|
+
if (status === 2) {
|
|
135
|
+
// 文档已保存,下载新版本
|
|
136
|
+
await this.onlyOfficeService.downloadDocument(url, fileId);
|
|
137
|
+
return { error: 0 };
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return { error: 0 };
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## API 端点
|
|
145
|
+
|
|
146
|
+
模块提供以下主要 API 端点:
|
|
147
|
+
|
|
148
|
+
- **GET `/api/v6/onlyoffice/config`**: 获取编辑器配置
|
|
149
|
+
- 查询参数: `fileId`, `mode` (edit/view)
|
|
150
|
+
- **GET `/api/v6/onlyoffice/download/:fileId`**: 下载文档
|
|
151
|
+
- **POST `/api/v6/onlyoffice/callback/:fileId`**: 接收 OnlyOffice 回调
|
|
152
|
+
- **POST `/api/v6/onlyoffice/create`**: 创建新文档
|
|
153
|
+
|
|
154
|
+
## 支持的文档格式
|
|
155
|
+
|
|
156
|
+
### 文字处理(Word)
|
|
157
|
+
- `.docx`, `.doc`, `.odt`, `.rtf`, `.txt`, `.html`, `.htm`, `.mht`, `.pdf`
|
|
158
|
+
|
|
159
|
+
### 电子表格(Excel)
|
|
160
|
+
- `.xlsx`, `.xls`, `.ods`, `.csv`
|
|
161
|
+
|
|
162
|
+
### 演示文稿(PowerPoint)
|
|
163
|
+
- `.pptx`, `.ppt`, `.odp`
|
|
164
|
+
|
|
165
|
+
## 编辑器模式
|
|
166
|
+
|
|
167
|
+
### 编辑模式 (edit)
|
|
168
|
+
|
|
169
|
+
允许用户编辑文档:
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
const config = {
|
|
173
|
+
mode: 'edit',
|
|
174
|
+
permissions: {
|
|
175
|
+
edit: true,
|
|
176
|
+
download: true,
|
|
177
|
+
print: true,
|
|
178
|
+
review: true,
|
|
179
|
+
comment: true
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### 查看模式 (view)
|
|
185
|
+
|
|
186
|
+
只读模式,不允许编辑:
|
|
187
|
+
|
|
188
|
+
```typescript
|
|
189
|
+
const config = {
|
|
190
|
+
mode: 'view',
|
|
191
|
+
permissions: {
|
|
192
|
+
edit: false,
|
|
193
|
+
download: true,
|
|
194
|
+
print: true
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## 水印配置
|
|
200
|
+
|
|
201
|
+
启用水印保护文档:
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
const config = {
|
|
205
|
+
watermark: {
|
|
206
|
+
enabled: true,
|
|
207
|
+
text: 'Confidential',
|
|
208
|
+
diagonal: true,
|
|
209
|
+
opacity: 0.5,
|
|
210
|
+
color: '#FF0000'
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## 协作功能
|
|
216
|
+
|
|
217
|
+
### 实时协作
|
|
218
|
+
|
|
219
|
+
多用户同时编辑:
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
const config = {
|
|
223
|
+
coEditing: {
|
|
224
|
+
mode: 'fast', // 'fast' 或 'strict'
|
|
225
|
+
change: true
|
|
226
|
+
},
|
|
227
|
+
user: {
|
|
228
|
+
id: userId,
|
|
229
|
+
name: userName,
|
|
230
|
+
group: 'team-1'
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### 评论和审阅
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
const config = {
|
|
239
|
+
permissions: {
|
|
240
|
+
comment: true, // 允许评论
|
|
241
|
+
review: true, // 允许审阅
|
|
242
|
+
reviewGroups: ['editor', 'reviewer']
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## 安全性
|
|
248
|
+
|
|
249
|
+
### JWT 令牌
|
|
250
|
+
|
|
251
|
+
所有与 OnlyOffice Document Server 的通信都使用 JWT 签名:
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
B6_ONLYOFFICE_JWT_SECRET=your-very-secret-key
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### 回调验证
|
|
258
|
+
|
|
259
|
+
模块自动验证来自 OnlyOffice 的回调请求的 JWT 签名。
|
|
260
|
+
|
|
261
|
+
## 使用场景
|
|
262
|
+
|
|
263
|
+
- **文档协作**: 团队协作编辑 Office 文档
|
|
264
|
+
- **在线办公**: 无需安装 Office 即可编辑文档
|
|
265
|
+
- **文档审阅**: 支持评论、修订和审阅流程
|
|
266
|
+
- **文档预览**: 在线预览各种格式的文档
|
|
267
|
+
- **版本控制**: 管理文档版本历史
|
|
268
|
+
|
|
269
|
+
## OnlyOffice Document Server 部署
|
|
270
|
+
|
|
271
|
+
### Docker 部署
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
docker run -i -t -d -p 80:80 \
|
|
275
|
+
-e JWT_ENABLED=true \
|
|
276
|
+
-e JWT_SECRET=your-secret-key \
|
|
277
|
+
onlyoffice/documentserver
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### 配置连接
|
|
281
|
+
|
|
282
|
+
```bash
|
|
283
|
+
B6_ONLYOFFICE_URL=http://your-server:80
|
|
284
|
+
B6_ONLYOFFICE_JWT_SECRET=your-secret-key
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## 依赖项
|
|
288
|
+
|
|
289
|
+
### Peer Dependencies
|
|
290
|
+
|
|
291
|
+
- `@builder6/core`: ^3.0.10 - 核心功能模块
|
|
292
|
+
- `@builder6/files`: ^3.0.10 - 文件管理模块
|
|
293
|
+
- `@nestjs/common`: ^11.0.0 - NestJS 核心
|
|
294
|
+
- `@nestjs/core`: ^11.0.0 - NestJS 核心
|
|
295
|
+
- `@nestjs/swagger`: ^11.0.7 - API 文档
|
|
296
|
+
|
|
297
|
+
## 开发
|
|
298
|
+
|
|
299
|
+
### 构建
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
npm run build
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### 监听模式
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
npm run build:watch
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### 格式化代码
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
npm run format
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
## 故障排查
|
|
318
|
+
|
|
319
|
+
### 常见问题
|
|
320
|
+
|
|
321
|
+
1. **编辑器无法加载**: 检查 `B6_ONLYOFFICE_URL` 是否可访问
|
|
322
|
+
2. **保存失败**: 确保回调 URL 可以从 OnlyOffice 服务器访问
|
|
323
|
+
3. **JWT 验证失败**: 确保密钥配置一致
|
|
324
|
+
4. **文档打不开**: 检查文件格式是否支持
|
|
325
|
+
|
|
326
|
+
## 参考资源
|
|
327
|
+
|
|
328
|
+
- [OnlyOffice API 文档](https://api.onlyoffice.com/editors/basic)
|
|
329
|
+
- [OnlyOffice Document Server](https://github.com/ONLYOFFICE/DocumentServer)
|
|
330
|
+
- [编辑器配置](https://api.onlyoffice.com/editors/config/)
|
|
331
|
+
|
|
332
|
+
## License
|
|
333
|
+
|
|
334
|
+
MIT
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const testing_1 = require("@nestjs/testing");
|
|
4
|
-
const
|
|
4
|
+
const onlyoffice_controller_1 = require("./onlyoffice.controller");
|
|
5
5
|
describe('OnlyOfficeController', () => {
|
|
6
6
|
let controller;
|
|
7
7
|
beforeEach(async () => {
|
|
8
8
|
const module = await testing_1.Test.createTestingModule({
|
|
9
|
-
controllers: [
|
|
9
|
+
controllers: [onlyoffice_controller_1.OnlyOfficeController],
|
|
10
10
|
}).compile();
|
|
11
|
-
controller = module.get(
|
|
11
|
+
controller = module.get(onlyoffice_controller_1.OnlyOfficeController);
|
|
12
12
|
});
|
|
13
13
|
it('should be defined', () => {
|
|
14
14
|
expect(controller).toBeDefined();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@builder6/onlyoffice",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.12",
|
|
4
4
|
"main": "dist/plugin.module.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"files": [
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
"publishConfig": {
|
|
27
27
|
"access": "public"
|
|
28
28
|
},
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "6d6e13fed8d4b3c6de14f84dcb6287c5661ea6f6"
|
|
30
30
|
}
|