跳至主要內容

OnlyOffice-在线Office

程序员李某某大约 41 分钟

OnlyOffice-在线Office

介绍

OnlyOffice 是一个基于 Web 的在线编辑器

安装

Linux Docker安装

docker run -i -t -d -p 9988:80 --restart=always \
    -v /usr/local/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  \
    -v /usr/local/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  \
    -v /usr/local/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \
    -v /usr/local/onlyoffice/DocumentServer/db:/var/lib/postgresql \
    onlyoffice/documentserver:7.1.1
## Linux
docker run -it -d -p 9988:80 --restart=always --privileged --name=office \
    onlyoffice/documentserver:latest
    
docker run -it -d -p 9988:80 --restart=always --name=office \
    -v /data/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  \
    -v /data/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  \
    -v /data/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \
    -v /data/onlyoffice/DocumentServer/db:/var/lib/postgresql \
    -v /data/onlyoffice/DocumentServer/server:/etc/onlyoffice/documentserver \
    onlyoffice/documentserver:latest

## Windows

docker run -i -t -d -p 9988:80 --name onlyoffice8 --restart=always -v D:\Documents\test\app\onlyoffice\DocumentServer3\logs:/var/log/onlyoffice  -v D:\Documents\test\app\onlyoffice\DocumentServer3\data:/var/www/onlyoffice/Data  -v D:\Documents\test\app\onlyoffice\DocumentServer3\lib:/var/lib/onlyoffice -v D:\Documents\test\app\onlyoffice\DocumentServer3\db:/var/lib/postgresql -e JWT_ENABLED=false onlyoffice/documentserver:latest

docker run -i -t -d -p 9988:80 --name onlyoffice8  --privileged --restart=always -v D:\Documents\test\app\onlyoffice\DocumentServer3\logs:/var/log/onlyoffice  -v D:\Documents\test\app\onlyoffice\DocumentServer3\data:/var/www/onlyoffice/Data  -v D:\Documents\test\app\onlyoffice\DocumentServer3\lib:/var/lib/onlyoffice -v D:\Documents\test\app\onlyoffice\DocumentServer3\db:/var/lib/postgresql -v D:\Documents\test\app\onlyoffice\DocumentServer3\server:/etc/onlyoffice/documentserver -e JWT_ENABLED=false onlyoffice/documentserver:latest

  • 访问地址:http://127.0.0.1:9988open in new window 使用本地ip访问,用127.0.0.1或者localhost访问可能会遇到一些问题
  • 进入页面提示我们进入容器执行命令 supervisorctl start ds:example
  • GO TO TEST EXAMPLE

离线安装

  • 导出镜像可以在内网离线部署docker save -o xxoo.tar 镜像id
  • 离线部署docker load -i xxoo.tar onlyoffice/documentserver
  • 镜像重命名docker tag 镜像id onlyoffice/documentserver:7.1.1

或者直接使用 docker import 导入镜像 docker import xxoo.tar onlyoffice/documentserver:7.1.1 这种方式报错docker: Error response from daemon: no command specified. 很多帖子说在导出的机器上执行docker ps -a --no-trunc找到 COMMAND 命令,在执行dokcer run时加在最后, 但是我没成功,不知道是不是我没有用 docker export 导出镜像

在Windows中打包的镜像是Linux amd架构的

ARM 架构安装

## 下载
docker pull onlyoffice/documentserver:latest --platform=arm64
## 查看架构
docker inspect onlyoffice/documentserver | grep Architecture

其他步骤就和上面的相同了

环境变量

ONLYOFFICE_HTTPS_HSTS_ENABLED:用于关闭 HSTS 配置的高级配置选项。仅在使用 SSL 时适用。默认为true。 ONLYOFFICE_HTTPS_HSTS_MAXAGE:用于在 onlyoffice NGINX vHost 配置中设置 HSTS 最大期限的高级配置选项。仅在使用 SSL 时适用。默认为31536000。 SSL_CERTIFICATE_PATH:要使用的 SSL 证书的路径。默认为/var/www/onlyoffice/Data/certs/tls.crt。 SSL_KEY_PATH:SSL 证书私钥的路径。默认为/var/www/onlyoffice/Data/certs/tls.key。 SSL_DHPARAM_PATH:Diffie-Hellman 参数的路径。默认为/var/www/onlyoffice/Data/certs/dhparam.pem。 SSL_VERIFY_CLIENT:使用 启用客户端证书验证CA_CERTIFICATES_PATH file。默认为false。 DB_TYPE:数据库类型。支持的值为postgres、mariadb或mysql。默认为postgres。 DB_HOST:数据库服务器运行的主机的 IP 地址或名称。 DB_PORT:数据库服务器端口号。 DB_NAME:在映像启动时要创建的数据库的名称。 DB_USER:数据库账户的具有超级用户权限的新用户名。 DB_PWD:为数据库账户设置的密码。 AMQP_URI:连接到消息代理服务器的AMQP URI 。 AMQP_TYPE:消息代理类型。支持的值为rabbitmq或activemq。默认为rabbitmq。 REDIS_SERVER_HOST:运行 Redis 服务器的主机的 IP 地址或名称。 REDIS_SERVER_PORT:Redis 服务器端口号。 REDIS_SERVER_PASS:Redis 服务器密码。默认情况下不设置密码。 NGINX_WORKER_PROCESSES:定义 NGINX 工作进程的数量。 NGINX_WORKER_CONNECTIONS:设置 NGINX 工作进程可以打开的最大同时连接数。 SECURE_LINK_SECRET:定义 nginx 配置指令secure_link_md5的秘密。默认为random string。 JWT_ENABLED :指定通过ONLYOFFICE Docs启用 JSON Web 令牌验证。默认为true。 JWT_SECRET :定义用于验证对ONLYOFFICE Docs的请求中的 JSON Web 令牌的密钥。默认为随机值。 JWT_HEADER:定义用于发送 JSON Web 令牌的 HTTP 标头。默认为Authorization。 JWT_IN_BODY :指定在ONLYOFFICE 文档的请求正文中启用令牌验证。默认为false。 ALLOW_META_IP_ADDRESS:定义是否允许连接元 IP 地址。默认为false。 ALLOW_PRIVATE_IP_ADDRESS:定义是否允许连接私有 IP 地址。默认为false。 WOPI_ENABLED:指定启用 wopi 处理程序。默认为false。 USE_UNAUTHORIZED_STORAGEtrue :如果您的存储服务器使用自签名证书,例如 Nextcloud,则设置为。默认为false。 GENERATE_FONTS:当 时true,每次启动时重新生成字体列表和字体缩略图等。默认为true。 METRICS_ENABLED :指定为ONLYOFFICE Docs启用 StatsD 。默认为false。 METRICS_HOST:定义 StatsD 监听主机。默认为localhost。 METRICS_PORT:定义 StatsD 监听端口。默认为8125。 METRICS_PREFIX:定义后端服务的 StatsD 指标前缀。默认为ds.。 LETS_ENCRYPT_DOMAIN:定义 Let's Encrypt 证书的域。 LETS_ENCRYPT_MAIL:定义 Let's Encrypt 证书的域管理员邮件地址。

前端集成

原生示例

连接器

常见问题

启动报错

/var/www/onlyoffice/documentserver/npm/json[35]: ../src/node_platform.cc:61:std::unique_ptr<long unsigned int> node::WorkerThreadsTaskRunner::DelayedTaskScheduler::Start(): Assertion `(0) == (uv_thread_create(t.get(), start_thread, this))' failed.
1: 0x8e08f0 node::Abort() [/var/www/onlyoffice/documentserver/npm/json]
2: 0x8e096c  [/var/www/onlyoffice/documentserver/npm/json]
3: 0x94c4f7 node::WorkerThreadsTaskRunner::WorkerThreadsTaskRunner(int) [/var/www/onlyoffice/documentserver/npm/json]
4: 0x94c607 node::NodePlatform::NodePlatform(int, v8::TracingController*) [/var/www/onlyoffice/documentserver/npm/json]
5: 0x8bee61 node::InitializeOncePerProcess(int, char**) [/var/www/onlyoffice/documentserver/npm/json]
6: 0x8bf19c node::Start(int, char**) [/var/www/onlyoffice/documentserver/npm/json]
7: 0x7f7425190d90  [/lib/x86_64-linux-gnu/libc.so.6]
8: 0x7f7425190e40 __libc_start_main [/lib/x86_64-linux-gnu/libc.so.6]
9: 0x842a71  [/var/www/onlyoffice/documentserver/npm/json]
/app/ds/run-document-server.sh: line 215: -3: substring expression < 0
nc: port number invalid: 
Waiting for connection to the  host on port 
nc: port number invalid: 
Waiting for connection to the  host on port 
  • 启动命令加 --privileged, 如

    docker run -itd --restart=always --name=onlyoffice --privileged -p 8085:80 onlyoffice/documentserver
    
  • --privileged 选项在 Docker 中用来授予容器更高的权限。这允许容器访问宿主机的所有设备,进行更深层次的系统调用,并绕过默认的安全限制。它使容器几乎拥有宿主机的全部权限,但也可能带来安全风险。

  • 如果还不行,尝试升级docker版本到最新

打开编辑时下载失败

[2024-08-15T07:09:39.670] [ERROR] [localhost] [7d775771c8] [1] nodeJS - error downloadFile:url=http://172.27.144.1:8082/office/downloadFile/17;attempt=1;code:null;connect:null Error: DNS lookup 172.27.144.1(family:undefined, host:undefined) is not allowed. Because, It is private IP address.
    at validateIPAddress (/snapshot/server/Common/node_modules/request-filtering-agent/lib/request-filtering-agent.js:71:20)
    at Socket.<anonymous> (/snapshot/server/Common/node_modules/request-filtering-agent/lib/request-filtering-agent.js:125:29)
    at Object.onceWrapper (node:events:641:28)
    at Socket.emit (node:events:539:35)
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1173:10)
[2024-08-15T07:09:40.676] [ERROR] [localhost] [7d775771c8] [1] nodeJS - error downloadFile:url=http://172.27.144.1:8082/office/downloadFile/17;attempt=2;code:null;connect:null Error: DNS lookup 172.27.144.1(family:undefined, host:undefined) is not allowed. Because, It is private IP address.
    at validateIPAddress (/snapshot/server/Common/node_modules/request-filtering-agent/lib/request-filtering-agent.js:71:20)
    at Socket.<anonymous> (/snapshot/server/Common/node_modules/request-filtering-agent/lib/request-filtering-agent.js:125:29)
    at Object.onceWrapper (node:events:641:28)
    at Socket.emit (node:events:539:35)
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1173:10)
[2024-08-15T07:09:41.686] [ERROR] [localhost] [7d775771c8] [1] nodeJS - error downloadFile:url=http://172.27.144.1:8082/office/downloadFile/17;attempt=3;code:null;connect:null Error: DNS lookup 172.27.144.1(family:undefined, host:undefined) is not allowed. Because, It is private IP address.
    at validateIPAddress (/snapshot/server/Common/node_modules/request-filtering-agent/lib/request-filtering-agent.js:71:20)
    at Socket.<anonymous> (/snapshot/server/Common/node_modules/request-filtering-agent/lib/request-filtering-agent.js:125:29)
    at Object.onceWrapper (node:events:641:28)
    at Socket.emit (node:events:539:35)
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1173:10)

编辑docker中/etc/onlyoffice/documentserver/default.json下的内容: d

"request-filtering-agent" : {
"allowPrivateIPAddress": true,
"allowMetaIPAddress": true
},
## 导出容器再修改
docker cp onlyoffice:/etc/onlyoffice/documentserver/default.json ./
vim default.json
docker cp ./default.json onlyoffice:/etc/onlyoffice/documentserver/default.json

更改后,需要重启容器后恢复正常。

添加字体

参考open in new window

###### 修改配置文件
cd /etc/onlyoffice/documentserver/
## 修改

# 把自己的字体导入到onlyoffice安装后的的目录中
# /var/www/onlyoffice/documentserver/core-fonts/fonts

# 执行脚本,初始化字体
# /usr/bin/documentserver-generate-allfonts.sh

上传文件大小限制

/etc/onlyoffice/documentserver/default.json

FileConverter.converter.maxDownloadBytes

services.CoAuthoring.server.limits_tempfile_upload

inputLimits.zip.uncompressed --- 有几个改几个

修改他们的值改为524288000(500M)

改完以后,一定要重启服务

改中文字号

/var/www/onlyoffice/documentserver/web-apps/apps/documenteditor/main/app.js 里找到{value:22,displayValue:"22"} 把displayValue对应的值换成汉字字体 小二等

其实中文数字(字号)和阿拉伯数字(磅值)表达的都是字体大小的意思,它们之间的对应关系如下表:

字号八号七号小六六号小五五号小四四号小三三号小二二号小一一号小初初号
磅值55.56.57.5910.512141516182224263642
{value:42,displayValue:"初号"},{value:36,displayValue:"小初"},
{value:26,displayValue:"一号"},{value:24,displayValue:"小一"},
{value:22,displayValue:"二号"},{value:18,displayValue:"小二"},
{value:16,displayValue:"三号"},{value:15,displayValue:"小三"},
{value:14,displayValue:"四号"},{value:12,displayValue:"小四"},
{value:10.5,displayValue:"五号"},{value:9,displayValue:"小五"},
{value:7.5,displayValue:"六号"},{value:6.5,displayValue:"小六"},
{value:5.5,displayValue:"七号"},{value:5,displayValue:"八号"},
{value:5,displayValue:"5"},{value:5.5,displayValue:"5.5"},
{value:6.5,displayValue:"6.5"},{value:7.5,displayValue:"8.5"},
{value:8,displayValue:"8"},{value:9,displayValue:"9"},
{value:10,displayValue:"10"},{value:10.5,displayValue:"10.5"},
{value:11,displayValue:"11"},{value:12,displayValue:"12"},
{value:14,displayValue:"14"},{value:16,displayValue:"16"},
{value:18,displayValue:"18"},{value:20,displayValue:"20"},
{value:22,displayValue:"22"},{value:24,displayValue:"24"},
{value:26,displayValue:"26"},{value:28,displayValue:"28"},
{value:36,displayValue:"36"},{value:48,displayValue:"48"},
{value:72,displayValue:"72"}

缩小下拉长度

{value:42,displayValue:"初号"},{value:36,displayValue:"小初"},
{value:26,displayValue:"一号"},{value:24,displayValue:"小一"},
{value:22,displayValue:"二号"},{value:18,displayValue:"小二"},
{value:16,displayValue:"三号"},{value:15,displayValue:"小三"},
{value:14,displayValue:"四号"},{value:12,displayValue:"小四"},
{value:10.5,displayValue:"五号"},{value:9,displayValue:"小五"},
{value:7.5,displayValue:"六号"},{value:6.5,displayValue:"小六"},
{value:5.5,displayValue:"七号"},{value:5,displayValue:"八号"},
{value:8,displayValue:"8"},{value:10,displayValue:"10"},
{value:20,displayValue:"20"},{value:28,displayValue:"28"},
{value:36,displayValue:"36"},{value:48,displayValue:"48"},
{value:72,displayValue:"72"}

docker cp ./app.js e19e6ac60aad:/var/www/onlyoffice/documentserver/web-apps/apps/documenteditor/main
docker cp ./app.js.gz e19e6ac60aad:/var/www/onlyoffice/documentserver/web-apps/apps/documenteditor/main

注意:

替换后要把app.js.gz文件删掉,或者把app.js文件压缩后替换,可以用7z压缩软件压缩。

乱码问题

问题描述:首次用onlyoffice打开文档是完好的,但是编辑保存之后再次打开显示上图的问题。

解决思路:最先开始是怀疑onlyoffice对文档的处理产生了问题,甚至怀疑是浏览器的编码问题。所以在onlyoffice的回调中获取流下载到本地发现文件是完好的,因为对获取到的文件流做了一个上传minio的操作,到minio中把上传的文件又下载下来看了下,发现在这一步已经是损坏文件了。onlyoffice打开文件的路径每次都是给的一个minio的下载地址。所以已经可以定位到是minio上传这一步骤出的错。最后发现是由于在往minio中上传文件时,往其中long size传的值为inputstream.available()而导致的。

putObject(String bucketName, String objectName, InputStream stream, long size, String contentType) 详细说明:这个inputstream是直接从url中获取的

URL url = new URL(fileUrl); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); InputStream inputstream= connection.getInputStream(); 然后调用inputstream.available()的话,打断点进去会发现获取到的数值是小于文档本身的。这是由于available()获取流长度如果是从本地文件读取的话是能够正确的读取到整个文件长度的,但是如果是通过网络传输获取长度的话会出现值不准确的问题。这是由于网络传输中字节是分批发送的,而调用的时候只是传输了第一批次发送的文件长度。这就造成了传送错误的文件长度给了minio。而minio根据这个长度将流存入,就会出现总长度可能为10000而minio只读了3000的情况。因此minio中的文件打开也为损坏文件,在onlyoffice中打开则是一堆乱码。

解决方案

1.把从url中读取的流拷一份出来

byte[] data = IOUtils.toByteArray(stream); InputStream stream = new ByteArrayInputStream(data); 这样stream.available()获取到的长度就是准确的,文档也就不会乱码损坏了。

int len = connection.getContentLength(); 从connection中获取到文档的长度,然后调用minio的时候传这个值而不是steam.available()的值。

总的来说只要传一个准确的文档长度就ok了。

解除20同时编辑限制

docker pull guanyueyun/ooffice:7.1.1.23

docker run -i -t -d -e JWT_ENABLED=false --restart=always \
-p 8889:80 ittel/onlyoffice:8.1.0zh-cn
  1. 商用版config里配置就能修改logo
"editorConfig": {
	"customization": {
		"logo": {
			"image": "https://example.com/logo.png",
			"imageEmbedded": "https://example.com/logo_em.png",
			"url": "https://example.com"
		}
	}
}
  1. 社区版

    页面找定位元素css样式,会有路径

    • 早期版本改/var/www/onlyoffice/documentserver/web-apps/apps/documenteditor/main/resources/css/app.css, 用的base64的图片,修改后,打包成app.css.gz,替换覆盖文件
    • 中期版本直接替换/var/www/onlyoffice/documentserver/web-apps/apps/documenteditor/main/resources/img/header/下的图片即可
    • 高版本替换/var/www/onlyoffice/documentserver/web-apps/apps/common/main/resources/img/header/

密钥

官方文档open in new window

## 查看密钥
cat /etc/onlyoffice/documentserver/local.json

回调

https://api.onlyoffice.com/zh/editors/callbackopen in new window

方式

文档编辑服务(DocumentServer) 用 JavaScript APIopen in new windowcallbackUrl 通知 文档存储服务(开发中一般是我们自己的服务) 有关文档编辑的状态。 文档编辑服务(DocumentServer) 使用POST 请求,请求信息在正文中。

参数

参数描述类型出现
actions定义当用户对文档执行操作时接收到的对象。type 字段值可以具有以下值:0 - 用户断开与文档共同编辑的连接,1 - 新用户连接到文档共同编辑,2 - 用户单击 强制保存按钮open in new windowuserid 字段值是用户标识符。object数组可选的
changeshistory定义具有文档更改历史的对象数组。仅当 status 值等于 23 时,对象才存在。 必须作为对象的属性 changes 以参数形式发送给 refreshHistoryopen in new window 方法。 自 4.2 版起已删除,请改用 historyopen in new windowobject数组可选的
changesurl使用文档编辑数据定义文件的链接,用于跟踪和显示文档更改历史记录。 仅当 status 等于 23 时,链接才存在。必须保存文件,并且必须使用 setHistoryDataopen in new window 方法将其地址作为 changesUrl 参数发送,以显示与特定文档版本对应的更改。string可选的
filetype定义从 urlopen in new window 参数指定的链接下载文档的扩展名。 文件类型默认为 OOXML,但如果启用了 assemblyFormatAsOriginopen in new window 服务器设置,则文件将以原始格式保存。string可选的
forcesavetype定义执行 强制保存open in new window 请求时的启动器类型。 可以有以下值:0 - 为 命令服务open in new window执行强制保存请求,1 - 每次保存完成时都会执行强制保存请求(例如单击 保存 按钮),这仅在 forcesaveopen in new window 选项设置为 true时可用,2 - 强制保存请求由计时器按服务器配置中的设置执行,3 - 每次提交表单时都会执行强制保存请求(例如 Complete & Submitopen in new window 按钮被点击 )。该类型仅在 status 值等于 67 时出现。integer可选的
formsdataurl用提交的表单数据,定义 JSON 文件的 URL。 此处open in new window描述了包含表单数据的数组结构。 该文件包含以下参数:key - 表单键。 如果当前表单是单选按钮,则该字段包含表单组键, type: string, example: "Text1";tag - 表单标签, type: string, example: "";value - 当前表单值, type: string, example: "inner text";type - 表单类型 (text, checkBox, picture, comboBox, dropDownList, dateTime, radio), type: string, example: "text".当 status 值等于 6 并且 forcesavetype 值等于 3 时,该对象才存在。对象可选的
history定义有文档更改历史的对象。 仅当 status 值等于 23 时,对象才存在。它包含对象 changesserverVersion,它们必须作为对象的属性 changesserverVersion 以参数形式发送给 refreshHistoryopen in new window 方法。对象可选的
key定义编辑的文档标识符。string必需的
status定义文档的状态。 可以有以下值:1 - 正在编辑文档,2 - 文档已准备好保存,3 - 发生文档保存错误,4 - 文档已关闭,没有任何更改,6 - 正在编辑文档,但保存了当前文档状态,7 - 强制保存文档时发生错误。integer必需的
url定义已编辑的要由文档存储服务保存的文档的链接。 仅当 status 值等于 2, 3, 67 时,链接才存在。string可选的
userdata定义发送到forcesaveopen in new windowinfoopen in new window 命令的命令服务的自定义信息(如果它在请求中存在)。string可选的
users定义打开文档进行编辑的用户的标识符列表;当文档被更改时,用户将返回最后编辑文档的用户的标识符(对于 status 2status 6 的应答)。string数组可选的

服务器存储所有callbackUrl,并根据执行操作的用户选择使用哪一个。

从 5.5 版本开始,根据请求的 status 选择 callbackUrlopen in new window。 从 4.4 到 5.5 版本, callbackUrl 来自最后一个加入共同编辑的用户。 在 4.4 之前的版本中,在共同编辑时, callbackUrl 来自第一次打开文件进行编辑的用户。

从 7.0 版开始, callbackUrl 来自同一用户的最后一个标签。在 7.0 版之前, callbackUrl 来自第一个用户标签。

状态

状态描述
status 1每次用户连接或断开文档共同编辑时都会收到它。他们的 callbackUrl 被使用。请注意,当用户在遭遇Internet 故障后返回到没有更改的文档时也可以收到 status 1。这种情况可以描述如下:当用户打开文档时,会发送 status 1。如果 Internet 连接丢失并且用户没有对文档进行任何更改,则会发送 status 4。 屏幕上显示错误并在查看器中打开文档。在 100 秒内,互联网连接恢复,用户重新连接到文档并再次发送 status 1。现在用户可以继续编辑文档。将收到 status 24,具体取决于用户是否对文档进行了任何更改。
Status 2 (3)它在编辑文档关闭后 10 秒open in new window 收到,该用户的标识符是最后一个将更改发送到文档编辑服务的用户。 对文件进行最后更改的用户的 callbackUrl 被使用。
Status 4它是在最后一个用户关闭所编辑的没有更改的文档情况下收到的。他们的 callbackUrl 被使用。
Status 6 (7)在执行强制保存请求时接收到。callbackUrl 依赖于 forcesavetype 参数:如果 forcesavetype 参数设置为 1,则使用点击 保存 按钮的用户的 callbackUrl。如果 forcesavetype 参数设置为 02,则使用对文件进行最后更改的用户的 callbackUrl。如果 forcesavetype 参数设置为3,则使用点击 提交 按钮的用户的 callbackUrl。从版本 5.5 到版本 6.1,始终使用对文件进行最后更改的用户的 callbackUrl

高级参数

config

  • document:包含与文档有关的所有参数(标题、网址、文件类型等);

  • editorConfig:定义与编辑器界面有关的参数:打开模式(查看器或编辑器)、界面语言、附加按钮等)

  • event:是在对文档进行某些操作时调用的特殊事件列表,这些操作包括加载、修改等。

  • documentType:定义要打开的文档类型:

    • word - 文本文档 (.doc、.docm、.docx、.docxf、.dot、.dotm、.dotx、.epub、.fb2、.fodt、.htm、.html、.mht、.mhtml、.odt、.ott、.rtf、.stw、.sxw、.txt、.wps、.wpt、.xml),
    • cell - 电子表格 (.csv、.et、.ett、.fods、.ods、.ots、.sxc、.xls、.xlsb、.xlsm、.xlsx、.xlt、.xltm、.xltx、.xml
    • slide - 演示文稿 (.dps、.dpt、.fodp、.odp、.otp、.pot、.potm、.potx、.pps、.ppsm、.ppsx、.ppt、.pptm、.pptx、.sxi
    • pdf - 便携式文档格式 (.djvu、.docxf、.oform、.oxps、.pdf、.xps)。
  • height:定义浏览器窗口中的文档高度(默认为100%

  • width:定义浏览器窗口中的文档宽度(默认为100%

  • token:以 令牌open in new window的形式定义添加到 文档服务器 配置的加密签名

  • type:定义用于访问文档的平台类型。 默认值为 "desktop"

    • 为从台式机或笔记本电脑访问文档而优化 - Desktop
    • 为从平板电脑或智能手机访问文档而优化 - mobile
    • 为易于嵌入网页而特别设计 - embedded

document

  • info - 包含文档的附加参数(文档所有者、存储文档的文件夹、上传日期、共享设置)

    • owner:定义文档所有者/创建者的名称。

    • uploaded:定义文档上传日期。

    • favorite:定义 收藏 图标的高亮状态。 当用户单击图标时,将调用 onMetaChangeopen in new window 事件。 如果参数 未定义,则 收藏 图标不会显示在编辑器窗口标题处。

    • folder:定义存储文档的文件夹(如果文档存储在根文件夹中,则可以为空)。

    • sharingSettings:显示有关允许与其他用户共享文档的设置的信息:是个数组

      • isLink - 将用户图标更改为链接图标, 类型:boolean, 示例:false;

      • permissions - 具有上述名称的用户的访问权限。 可以是 完全访问只读拒绝访问, 类型:string, 示例:完全访问;

      • user - 文档将与之共享的用户的名称, 类型:string, 示例:"John Smith"。

      • 示例

        [ { "permissions": "Full Access", "user": "John Smith" } ]
        
  • permissionsopen in new window - 定义是否可以编辑和下载文档;

    • chat:定义是否在文档中启用聊天功能。 如果聊天权限设置为 true,将显示 聊天 菜单按钮。 默认值为 true

    • comment:定义是否可以评论文档。 如果评论权限设置为 "true",文档 侧栏 将包含 评论 菜单选项;如果 mode 参数设置为 edit,文档注释将仅对文档编辑器可用。默认值与 edit 参数的值一致。

      如果 edit 设置为 "true" 并且 comment 也设置为 "true",用户将能够编辑文档和评论。 如果 edit 设置为 "true"comment 设置为 "false",用户将只能编辑,相应的评论功能将只能查看,评论的添加和编辑将不可用。 如果 edit 设置为 "false" 并且 comment 设置为 "true",该文档将仅用于评论。 如果 edit 设置为 "false"review 设置为 "false"comments 设置为 "true",则不考虑 fillForms 值并且无法填写表单。

    • commentGroups:

    • 定义用户可以编辑、删除和/或查看其评论的 open in new window。 该对象具有以下参数:

      • edit - 用户可以编辑其他用户发表的评论, 类型:list, 示例:["Group2", ""];
      • remove - 用户可以删除其他用户的评论, 类型:list, 示例:[];
      • view - 用户可以查看其他用户发表的评论, 类型:list, 示例:""。

      [""] 值意味着用户可以编辑/删除/查看不属于这些组的人所做的评论(例如,如果文档在第三方编辑器中进行了审阅)。 如果值为 [],则用户无法编辑/删除/查看任何组的评论。 如果 edit, removeview 参数为 "" 或未指定,则用户可以查看/编辑/删除任何用户的评论。

    • copy:定义是否可以将内容复制到剪贴板。 如果参数设置为 false,则粘贴内容将仅在当前文档编辑器中可用。 默认值为 true

    • deleteCommentAuthorOnly:定义用户是否只能删除他/她的评论。 默认值为 false

    • editCommentAuthorOnly:定义用户是否只能编辑他/她的评论。 默认值为 false

    • download:定义文档是可以下载还是只能在线查看或编辑。 如果下载权限设置为 "false",则 文件 菜单中将不存在 下载为... 菜单选项。 默认值为 true

    • edit:定义文档是可以编辑还是只能查看。 如果编辑权限设置为 "true", 文件 菜单将包含 编辑文档 菜单选项;请注意,如果编辑权限设置为 "false",文档将在查看器中打开,即使 mode 参数设置为 edit,您也 无法将其切换到编辑器。 默认值为 true

    • fillForms:定义是否可以填写表单。 仅当 modeopen in new window 参数设置为 edit时,文档编辑器和 pdf编辑器才可以填写表单。 默认值与 editopen in new windowreviewopen in new window 参数的值一致。

      如果 edit 设置为 "true"review 设置为 "true",则不考虑 fillForms 值并且可以填写表单。 |如果 edit 设置为 "false" 并且 review 设置为 "false" 并且fillForms也设置为 "true",用户只能填写文档中的表单。 如果 edit 设置为 "false" 并且 review 设置为 "false" 而且 fillForms 设置为 "true",不考虑 comments 值并且评论不可用。 仅填写表单模式目前仅适用于 文档编辑器

    • modifyContentControl:定义是否可以更改内容控制设置。 如果 modeopen in new window 参数设置为 edit,内容控制修改将仅可用于文档编辑器。 默认值为 true

    • modifyFilter:定义过滤器是否可以全局应用(true)影响所有其他用户,或本地应用(false),即仅适用于当前用户。 如果 modeopen in new window 参数设置为 edit,则过滤器修改仅可用于电子表格编辑器。 默认值为 true

      如果文档由具有完全访问权限的用户编辑,则该用户应用的过滤器将对所有其他用户可见,而不管他们的本地设置如何。

    • print:定义是否可以打印文档。 如果打印权限设置为 "false",则 文件 菜单中将不存在 打印 菜单选项。 默认值为 true

    • protect:定义工具栏上的 保护 选项卡和左侧菜单中的 保护 按钮是显示 (true) 还是隐藏 (false)。 默认值为 true

    • review:定义是否可以查看文档。 如果审阅权限设置为 true,文档 状态栏 将包含 审阅 菜单选项;如果 modeopen in new window 参数设置为 edit,文档审阅将仅对文档编辑器可用。 默认值与 editopen in new window 参数的值一致。

      如果 edit 设置为 "true" 并且 review 也设置为 "true",用户将能够编辑文档,接受/拒绝所做的更改并切换到他/她自己的审阅模式。 如果 edit 设置为 "true" 并且 review 设置为 "false",用户将只能进行编辑。 如果 edit 设置为 "false" 并且 review 设置为 "true",文档将仅在审阅模式下可用。

    • reviewGroups:定义用户可以接受/拒绝其更改的 open in new window[""] 值意味着用户可以查看不属于任何这些组的人所做的更改(例如,如果文档是在第三方编辑器中查看的)。 如果值为 [],则用户无法查看任何组所做的更改。 如果值为 "" 或未指定,则用户可以查看任何用户所做的更改。

    • userInfoGroups:定义其信息显示在编辑器中的用户组:

      • 用户名显示在编辑器标题的编辑用户列表中,
      • 输入文本时,会显示用户光标和工具提示及其名称,
      • 在严格的共同编辑模式下锁定对象时,会显示用户名。

      ["Group1", ""] 表示显示Group1中的用户和不属于任何组的用户的信息。 [] 表示根本不显示任何用户信息。 undefined"" 值表示显示所有用户的信息。

  • fileType:定义查看或编辑的源文档的文件类型。 必须是小写。 以下文件类型可用:.csv、.djvu、.doc、.docm、.docx、.docxf、.dot、.dotm、.dotx、.epub、.fb2、.fodp、.fods、.fodt、. htm、.html、.mht、.odp、.ods、.odt、.oform、.otp、.ots、.ott、.oxps、.pdf、.pot、.potm、.potx、.pps、.ppsm、 .ppsx、.ppt、.pptm、.pptx、.rtf、.txt、.xls、.xlsb、.xlsm、.xlsx、.xlt、.xltm、.xltx、.xml、.xps

  • key:定义服务用来识别文档的唯一文档标识符。 如果发送了已知key,则将从缓存中获取文档。 每次编辑和保存文档时,都必须重新生成key。 文档 url 可以用作 key,但不能使用特殊字符,长度限制为 128 个符号。

    可以使用的关键字符:0-9azAZ-._=。 最大密钥长度为 128 个字符。

  • referenceData:定义一个由集成商生成的对象,用于唯一标识其系统中的文件:

    • fileKey - 服务用来获取文件链接的唯一文档标识符。 在编辑和保存文档时不得更改(即它不等于 document.key 参数), 类型: string, 示例: "BCFA2CED";
    • instanceId - 唯一的系统标识符。如果数据从一个系统上的文件复制并插入到另一个系统的文件中,则通过链接粘贴将不可用, 并且上下文菜单中没有相应的按钮, 类型: string, 示例: "https://example.comopen in new window";
    • key - 定义服务用于从共同编辑会话获取数据的唯一文档标识符。 如果发送已知密钥,将从缓存中获取文档。 每次编辑并保存文档时,都必须重新生成密钥。 文档 url 可以用作key,但不能包含特殊字符,且长度限制为 128 个字符, 类型: string, 示例: "Khirz6zTPdfd7".
  • title:为查看或编辑的文档定义所需的文件名,该文件名也将在下载文档时用作文件名。 长度限制为 128 个符号

  • url:定义存储查看或编辑的源文档的绝对 URL。 使用本地链接时请务必添加 令牌open in new window。 否则会出现错误。

editorConfig

  • mode:定义编辑器打开模式。 可以是 view 以打开文档进行查看,也可以是 edit 以在编辑模式下打开文档,从而允许对文档数据进行更改。 默认值为 "edit"

  • actionLink:使用 data.actionLink 参数中的 onMakeActionLinkopen in new window 事件或 onRequestSendNotifyopen in new window 事件指定从 文档编辑服务 接收的数据,其中包含有关将滚动到的文档中的操作的信息。

  • callbackjUrl:指定 文档存储服务 的绝对 URL (必须由在自己的服务器上使用 ONLYOFFICE 文档服务器的软件集成商 实现open in new window)。

  • coEditing:定义共同编辑模式(FastStrict)以及更改它的可能性。 该对象具有以下参数:

    • mode - 共同编辑模式(faststrict)。 默认值为fast, 类型:string, 示例:"fast";
    • change - 定义是否可以在编辑器界面中更改共同编辑模式。 默认值为 false类型:boolean, 示例:true。

    此参数用于应用共同编辑open in new window查看open in new window模式

    请注意,如果在编辑器界面中更改 mode 设置,它将存储在浏览器本地存储中,并将覆盖作为 editorConfig.coEditing.mode 参数发送的任何值。

  • createUrl:定义将在其中创建并在创建后可用的文档的绝对 URL。 如果未指定,将没有创建按钮。 您可以使用 onRequestCreateNewopen in new window 事件代替此字段。

  • lang:定义编辑器界面语言(如果存在英语以外的其他语言)。 使用两个字母(zh、de、 ru、 it等)语言代码设置。 默认值为 "en"

    请注意,要将编辑器界面翻译为葡萄牙语(葡萄牙)或中文(繁体,台湾) (这些语言是在7.2版中添加的),您需要分别使用四个字母的语言代码-pt-PTzh-TW。 两个字母pt语言代码设置葡萄牙语(巴西),zh代码指定汉语(中华人民共和国)。

  • location:定义默认测量单位。 指定 usca 以设置英寸。 默认值为 ""

    请注意,设置 usca 值时,默认测量单位为英寸。

  • recent:在 打开最近.. 菜单选项中定义文档存在或不存在,其中可以设置以下文档参数:

    • folder - 存储文档的文件夹(如果文档存储在根文件夹中,可以为空), 类型:string, 例如:"Example Files";
    • title - 将在 Open Recent... 菜单选项中显示的文档标题, 类型:string, 例如:exampledocument1.docx;
    • Url - 存储它的文档的绝对 URL, 类型:string, 例如:"https://example.com/exampledocument1.docxopen in new window".
  • region:定义货币和日期和时间的默认显示格式(仅在 电子表格编辑器 中)。 使用四个字母(en-USfr-FR等)语言代码设置。 对于默认值,采用 lang 参数,或者,如果没有与 lang 值对应的区域设置可用,则使用 en-US

  • templates:在 新建... 菜单选项中定义模板是否存在,可以在其中设置以下文档参数:

  • user:定义当前查看或编辑文档的用户:

    • firstname - 用户的名字。 自 4.2 版起已弃用,请改用 name类型:string, 例如:"John";
    • group - 用户所属的组(或用逗号分隔的多个组), 类型:string, 例如:"Group1,Group2";
    • id - 用户的标识。 长度限制为 128 个符号。 此信息被存储并用于区分共同作者, 在保存和突出显示历史记录(在 更改open in new window列表中)时指出最后更改的 作者open in new window,并根据用户数量计算有权访问许可证的用户。 我们建议使用一些唯一的匿名哈希。 不要在此字段中使用敏感数据,例如姓名或电子邮件。 类型:string, 例如:"78e1e841";
    • image - 用户头像的地址, 类型: string, 例如: "https://example.com/url-to-user-avatar.pngopen in new window";
    • lastname - 用户的姓氏。 自 4.2 版起已弃用,请改用 name类型:string, 例如:"Smith";
    • name - 用户的全名。 长度限制为 128 个符号。 从 4.2 版开始使用, 类型:string, 例如:"John Smith"。

    请注意,因为头像 URL 被插入到编辑器框架的 HTML 中,对用户头像的请求是未经授权发送的。 此外,还可能出现CORS问题。 在这种情况下,请使用base64格式的头像。 例如,"data:image/png,base64,*****"

    请注意,如果您订阅了 onRequestUsersopen in new window 事件并使用 setUsersopen in new window 方法, 初始化配置中的 user.image 字段不是必需的。 如果头像以base64格式发送且初始化配置使用JWT签名,我们特别不建议指定此参数。 在这种情况下,令牌就会太长。

  • customization - 允许自定义编辑器界面,使其看起来像您的其他产品(如果有),并更改附加按钮、链接、更改徽标和编辑器所有者详细信息的显示或不显示;

    img
    • anonymous:添加对匿名名称的请求:

      • request - 定义是否发送请求。 默认值为 true类型:boolean, 示例:true;
      • label - 添加到用户名的后缀。 默认值为 Guest类型:string, 示例:"Guest";
    • autosave:定义 自动保存 菜单选项是启用还是禁用。 如果设置为 false,则只能选择 Strict 共同编辑模式,因为 Fast 在没有自动保存的情况下不起作用。 默认值为 true

    • close:定义用于关闭编辑器的关闭按钮的设置:

      • visible - 定义用于关闭编辑器的关闭按钮是显示还是隐藏。 默认值为 true, type: boolean, example: true;
      • text - 定义编辑器标题中按钮的工具提示文本或移动编辑器中的菜单项文本以及 Web 编辑器的 File 菜单中的按钮的工具提示文本, type: string, example: "关闭文件"。

      请注意,仅当设置了 onRequestCloseopen in new window 事件时,该参数才可用。 如果未声明该事件且未指定 close 参数,则不会显示关闭按钮。

      请注意,此参数也适用于移动编辑器。

    • comments:定义 注释 菜单按钮是显示还是隐藏。 请注意,如果您隐藏 评论 按钮,则相应的评论功能将仅供查看,无法添加和编辑评论。 默认值为 true

    • compactHeader:定义附加操作按钮是显示在编辑器窗口标题的上部靠近徽标 (false) 还是显示在工具栏 (true) 中,使标题更紧凑。 默认值为 false

    • compactToolbar:定义显示的顶部工具栏类型是完整的 (false) 还是紧凑的 (true)。 默认值为 false

    • compatibleFeatures:定义仅与 OOXML 格式兼容的功能的使用。 例如,不要对整个文档使用注释。 默认值为 false

    • customer:包含将在编辑器 关于 部分中显示的信息,并对所有编辑器用户可见。 该对象具有以下参数:

      • address - 允许访问编辑或编辑作者的公司或个人的邮政地址, 类型:字符串, 示例:"My City, 123a-45";
      • info - 关于您希望其他人知道的公司或个人的一些附加信息, 类型:字符串, 示例:"Some additional information";
      • logo - 图片 logo 的路径(这个文件没有特别推荐,但是如果是透明背景的 .png 格式会更好)。 图片必须具有以下尺寸:432x70, 类型:string, 示例:"https://example.com/logo-big.png"。open in new window
      • logoDark - 深色主题图像徽标的路径(此文件没有特别建议,但如果是透明背景的 .png 格式会更好)。 图片必须具有以下尺寸:432x70, 类型:string, 示例:"https://example.com/dark-logo-big.png"。open in new window
      • mail - 允许访问编辑或编辑作者的公司或个人的电子邮件地址, 类型:string, 示例:"john@example.com".
      • name - 授予编辑或编辑作者访问权限的公司或个人的名称, 类型:string, 示例:"John Smith and Co.";
      • phone-允许访问编辑或编辑作者的公司或个人的电话, 类型:string, 示例:"123456789";
      • www - 上述公司或个人的主页地址, 类型:string, 示例:"example.com"。
    • features:如果可能,定义用户可以禁用或自定义的参数:

      • roles*open in new window - 定义是否在 pdf 表单中禁用角色设置。 如果该参数等于 false,则隐藏角色管理器,并禁用代表特定角色查看表单。 在这种情况下,表单选项卡上的管理角色查看表单按钮以及右侧面板中用于设置字段角色的下拉列表将不会显示。 默认值为 truetype: boolean, example: true;
      • spellcheck - 定义在加载编辑器时拼写检查器是自动打开还是关闭。 如果此参数为布尔值,则将其设置为初始拼写检查值,并且不会隐藏拼写检查设置。 默认值为 true类型:object 或 boolean, 例如:true;
      • spellcheck.mode - 定义在加载编辑器时拼写检查器是自动打开还是关闭。 此参数仅适用于文档编辑器和演示文稿编辑器, 类型:boolean, 示例:true;

      请注意,如果在编辑器界面中更改 拼写检查 设置,它将存储在浏览器本地存储中,并将覆盖作为 editorConfig.customization.features.spellcheck 参数发送的任何值。

    • feedback:定义 反馈和支持 菜单按钮的设置。 可以是布尔值(仅显示或隐藏 反馈和支持 菜单按钮)或对象。 在对象类型的情况下,以下参数可用:

      • url - 单击 反馈和支持 菜单按钮时将打开的网站绝对URL, 类型:string, 示例:"https://example.com";open in new window
      • visible - 显示或隐藏 反馈和支持 菜单按钮, 类型:boolean, 示例:true。

      默认值为 false

    • forcesave:在 文档编辑服务 中保存文档时(例如单击 保存 按钮等),将文件强制保存请求添加到 回调处理程序open in new window。 默认值为 false。为true时候表示手动保存

    • goback:定义 打开文件位置 菜单按钮和右上角按钮的设置。 该对象具有以下参数:

      • Blank - 单击 打开文件位置按钮时,在新浏览器选项卡/窗口(如果值设置为 true)或当前选项卡(如果值设置为 false )中打开网站。 默认值为 true类型:boolean, 示例:true;
      • requestClose - 定义如果单击打开文件位置按钮,将调用 events.onRequestCloseopen in new window 事件而不是打开浏览器选项卡或窗口。 自 8.1 版起已弃用。请使用 closeopen in new window 参数代替, 类型:boolean, 示例:false;
      • text - 打开文件位置 菜单按钮和右上角按钮显示的文本(也就是说,不是 转到文档), 类型:string, 例如:"打开文件位置";
      • url - 单击 打开文件位置 菜单按钮时将打开的网站绝对 URL, 类型:string, 例如:"https://example.com"。open in new window
    • help:定义 帮助 菜单按钮是显示还是隐藏。 默认值为 true

    • hideNotes:定义注释面板在首次加载时是显示还是隐藏。 默认值为 false。此参数仅适用于演示文稿编辑器。

    • hideRightMenu:定义第一次加载时是否显示或隐藏右侧菜单。 默认值为 true

    • hideRulers:定义编辑器标尺是显示还是隐藏。 此参数可用于文档和演示文稿编辑器。文档编辑器的默认值为 false,演示文稿的默认值为 true

    • integrationMode:定义将编辑器嵌入网页的模式。 embed 值禁止在加载编辑器框架时滚动到编辑器框架,因为焦点未被捕获。

    • logo:更改编辑器标题左上角的图像文件。 推荐的图像高度为 20 像素。 该对象具有以下参数:

    • macros:定义当编辑器打开时是否自动运行文档宏。 默认值为 truefalse值对用户隐藏宏设置open in new window

    • macrosMode:定义启用自动开始时的宏运行模式。 可以取以下值:

      • disable - 不自动运行所有宏;
      • enable - 自动运行所有宏;
      • warn - 对运行宏发出警告并请求运行它们的权限。

      默认值为 warn

    • mentionShare:定义在评论中提及后描述事件的提示。 如果为 true,则提示表示用户将收到通知并访问文档。 如果为 false,则提示表示用户将仅收到提及通知。 默认值为 true

    • mobileForceView:定义移动文档编辑器在启动时是否以查看/编辑模式打开。 默认值为true

    • plugins:定义 插件open in new window 是否将启动并可用。 默认值为 true

    • review:包含有关审阅模式的信息。 该对象具有以下参数:

      • hideReviewDisplay - 定义 显示模式 按钮是在 协作 选项卡上显示还是隐藏。 默认值为 false类型:boolean, 示例:false;
      • hoverMode - 定义评论显示模式:通过悬停更改(true) 在工具提示中显示评论,或者通过单击更改(false)在气球中显示评论。 默认值为 false类型:boolean, 示例:false;
      • reviewDisplay - 定义打开文档进行查看时将使用的审阅编辑模式。 如果 modeopen in new window 设置为 view,它将仅对文档编辑器可用。 可以取以下值: - markup - 显示文档,并突出显示建议的更改; - simple - 显示文档并突出显示建议的更改,但气球已关闭; - final - 显示文档并应用了所有建议的更改; - original - 显示原始文档,没有建议的更改。 默认值为 original, 类型:string, 示例:"original";
      • showReviewChanges - 定义在加载编辑器时是否自动显示或隐藏审阅更改面板。 默认值为 false类型:boolean, 示例:false;
      • trackChanges - 无论 document.permissions.reviewopen in new window 参数如何,定义是否以审阅编辑模式 (true) 打开文档 (false) (审阅模式仅针对当前用户更改)。 如果参数 未定义,则使用 document.permissions.review 值(对于所有文档用户), 类型:boolean, 示例:true。
    • submitForm:定义顶部工具栏上是否显示或隐藏Complete & Submit按钮。 按钮仅适用于 pdf 格式。 默认值为false

    • toolbarHideFileName:定义文档标题在顶部工具栏上是可见的 (false) 还是隐藏的 (true)。 默认值为 false

    • uiTheme:定义编辑器主题设置。 可以通过两种方式设置:

      • theme id - 用户通过其 id 设置主题参数(theme-light, theme-classic-light, theme-dark, theme-contrast-dark),
      • default theme - 将设置默认的深色或浅色主题值(default-darkdefault-light)。 默认的浅色主题是 theme-classic-light

      第一个选项具有更高的优先级。

      除了可用的编辑器主题外,用户还可以为应用程序界面自定义自己的颜色主题open in new window

    • unit:定义标尺和对话框中使用的测量单位。 可以取以下值:

      • cm - 厘米,
      • pt - 点,
      • inch - 英寸。

      默认值为厘米 (cm)。

    • zoom:定义以百分比测量的文档显示缩放值。 可以取大于 0的值。 对于文本文档和演示文稿,可以将此参数设置为 -1 (使文档适合页面选项)或 -2 (使文档页面宽度适合编辑器页面)。 默认值为 100

  • embeddedopen in new window - 仅用于嵌入式文档类型,并允许更改用于控制嵌入式模式的按钮的行为;

    • embedUrl:定义文档的绝对 URL,作为嵌入网页的文档的源文件。
    • fullscreenUrl:定义将以全屏模式打开的文档的绝对 URL。
    • saveUrl:定义允许将文档保存到用户个人计算机上的绝对 URL。
    • shareUrl:定义允许其他用户共享此文档的绝对 URL。
    • toolbarDocked:定义嵌入式查看器工具栏的位置,可以是 topbottom
  • pluginsopen in new window - 用于将必要的 插件open in new window 连接到您的文档服务器,以便所有文档编辑器用户都可以看到它们;

    • autostart:定义插件的标识符数组(在 config.jsonopen in new window中输入),它将在编辑器打开时自动启动,并且插件将依次运行。

    • pluginsData:定义插件配置文件 (config.jsonopen in new window) 的绝对 URL 数组。

      ["https://example.com/plugins/chess-plugin/config.json"]
      

event

完整配置

config = {
    "document": {
        "fileType": "docx",
        "info": {
            "favorite": true,
            "folder": "Example Files",
            "owner": "John Smith",
            "sharingSettings": [
                {
                    "permissions": "Full Access",
                    "user": "John Smith"
                },
                {
                    "isLink": true,
                    "permissions": "Read Only",
                    "user": "External link"
                },
                ...
            ],
            "uploaded": "2010-07-07 3:46 PM"
        },
        "key": "Khirz6zTPdfd7",
        "permissions": {
            "chat": true,
            "comment": true,
            "commentGroups": [
                "edit": ["Group2", ""],
                "remove": [""],
                "view": ""
            ],
            "copy": true,
            "deleteCommentAuthorOnly": false,
            "download": true,
            "edit": true,
            "editCommentAuthorOnly": false,
            "fillForms": true,
            "modifyContentControl": true,
            "modifyFilter": true,
            "print": true,
            "protect": true,
            "review": true,
            "reviewGroups": ["Group1", "Group2", ""],
            "userInfoGroups": ["Group1", ""]
        },
        "referenceData": {
            "fileKey": "BCFA2CED",
            "instanceId": "https://example.com",
            "key": "Khirz6zTPdfd7"
        },
        "title": "Example Document Title.docx",
        "url": "https://example.com/url-to-example-document.docx"
    },
    "documentType": "word",
    "editorConfig": {
        "actionLink": ACTION_DATA,
        "callbackUrl": "https://example.com/url-to-callback.ashx",
        "coEditing": {
            "mode": "fast",
            "change": true
        },
        "createUrl": "https://example.com/url-to-create-document/",
        "customization": {
            "anonymous": {
                "request": true,
                "label": "Guest"
            },
            "autosave": true,
            "close": {
                "visible": true,
                "text": "Close file"
            },
            "comments": true,
            "compactHeader": false,
            "compactToolbar": false,
            "compatibleFeatures": false,
            "customer": {
                "address": "My City, 123a-45",
                "info": "Some additional information",
                "logo": "https://example.com/logo-big.png",
                "logoDark": "https://example.com/dark-logo-big.png",
                "mail": "john@example.com",
                "name": "John Smith and Co.",
                "phone": "123456789",
                "www": "example.com"
            },
            "features": {
                "roles": true,
                "spellcheck": {
                    "mode": true
                }
            },
        "feedback": {
                "url": "https://example.com",
                "visible": true
            },
        "forcesave": false,
        "goback": {
                "blank": true,
                "text": "Open file location",
                "url": "https://example.com"
            },
            "help": true,
            "hideNotes": false,
            "hideRightMenu": true,
            "hideRulers": false,
            "integrationMode": "embed",
            "logo": {
                "image": "https://example.com/logo.png",
                "imageDark": "https://example.com/dark-logo.png",
                "url": "https://example.com",
                "visible": true
            },
            "macros": true,
            "macrosMode": "warn",
            "mentionShare": true,
            "mobileForceView": true,
            "plugins": true,
            "review": {
                "hideReviewDisplay": false,
                "showReviewChanges": false,
                "reviewDisplay": "original",
                "trackChanges": true,
                "hoverMode": false
                },
        "submitForm": true,
        "toolbarHideFileName": false,
        "toolbarNoTabs": false,
        "uiTheme": "theme-dark",
        "unit": "cm",
        "zoom": 100
        },
        "embedded": {
            "embedUrl": "https://example.com/embedded?doc=exampledocument1.docx",
            "fullscreenUrl": "https://example.com/embedded?doc=exampledocument1.docx#fullscreen",
            "saveUrl": "https://example.com/download?doc=exampledocument1.docx",
            "shareUrl": "https://example.com/view?doc=exampledocument1.docx",
            "toolbarDocked": "top"
        },
        "lang": "en",
        "location": "us",
        "mode": "edit",
        "plugins": {
             "autostart": [
                 "asc.{0616AE85-5DBE-4B6B-A0A9-455C4F1503AD}",
                 "asc.{FFE1F462-1EA2-4391-990D-4CC84940B754}",
        ...
        ],
             "pluginsData": [
                 "https://example.com/plugin1/config.json",
                 "https://example.com/plugin2/config.json",
                 
             ...]
        },
        "recent": [
            {
                "folder": "Example Files",
                "title": "exampledocument1.docx",
                "url": "https://example.com/exampledocument1.docx"
            },
            {
                "folder": "Example Files",
                "title": "exampledocument2.docx",
                "url": "https://example.com/exampledocument2.docx"
            },
            ...
        ],
        "region": "en-US",
        "templates": [
            {
                "image": "https://example.com/exampletemplate1.png",
                "title": "exampletemplate1.docx",
                "url": "https://example.com/url-to-create-template1"
            },
            {
                "image": "https://example.com/exampletemplate2.png",
                "title": "exampletemplate2.docx",
                "url": "https://example.com/url-to-create-template2"
            },
            ...
        ],
        "user": {
            "group": "Group1,Group2",
            "id": "78e1e841",
            "image": "https://example.com/url-to-user-avatar.png",
            "name": "John Smith"
        }
    },
    "events": {
        "onAppReady": onAppReady,
        "onCollaborativeChanges": onCollaborativeChanges,
        "onDocumentReady": onDocumentReady,
        "onDocumentStateChange": onDocumentStateChange,
        "onDownloadAs": onDownloadAs,
        "onError": onError,
        "onInfo": onInfo,
        "onMetaChange": onMetaChange,
        "onOutdatedVersion": onOutdatedVersion,
        "onPluginsReady": onPluginsReady,
        "onRequestClose": onRequestClose,
        "onRequestCreateNew": onRequestCreateNew,
        "onRequestEditRights": onRequestEditRights,
        "onRequestHistory": onRequestHistory,
        "onRequestHistoryClose": onRequestHistoryClose,
        "onRequestHistoryData": onRequestHistoryData,
        "onRequestInsertImage": onRequestInsertImage,
        "onRequestMailMergeRecipients": onRequestMailMergeRecipients,
        "onRequestOpen": onRequestOpen,
        "onRequestReferenceData": onRequestReferenceData,
        "onRequestReferenceSource": onRequestReferenceSource,
        "onRequestRename": onRequestRename,
        "onRequestRestore": onRequestRestore,
        "onRequestSaveAs": onRequestSaveAs,
        "onRequestSelectDocument": onRequestSelectDocument,
        "onRequestSelectSpreadsheet": onRequestSelectSpreadsheet,
        "onRequestSendNotify": onRequestSendNotify,
        "onRequestSharingSettings": onRequestSaveAs,
        "onRequestStartFilling": onRequestStartFilling,
        "onRequestUsers": onRequestUsers,
        "onSubmit": onSubmit,
        "onWarning": onWarning
    },
    "height": "100%",
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.e30.LwimMJA3puF3ioGeS-tfczR3370GXBZMIL-bdpu4hOU",
    "type": "desktop",
    "width": "100%"
};

插件开发

hello plugin

我们先跑一下官方示例

## 克隆仓库
git clone https://github.com/ONLYOFFICE/sdkjs-plugins.git
cd sdkjs-plugins/helloworld
## 将文件夹启动为服务,<port>自定义一个端口
npm install http-server -g
http-server -p <port> --cors

在任何 ONLYOFFICE 网络编辑器中打开开发者控制台,转到**“控制台”选项卡,从下拉列表中选择frameEditor ,然后运行以下命令:**

Asc.editor.installDeveloperPlugin("https://<documentserver>:<port>/config.json");
// Asc.editor.installDeveloperPlugin("http://172.27.144.1:8888/config.json");
  • 其中documentserver是服务器的名称,port是安装 ONLYOFFICE Docs 的端口号
  • 上面这句话是官方说法,其实就是能访问的插件的config.json这个文件的地址

去插件中就可以看到hello word这个插件了

入门

插件所在的文件夹下必须包含两个文件 index.htmlopen in new windowconfig.jsonopen in new window,其中index.html中肯定会有一个引入的js文件,所以一般会包含三个文件(外加 pluginCode.jsopen in new window

官方的开发说明open in new window

## 拉示例代码
git clone https://github.com/ONLYOFFICE/onlyoffice.github.io

onlyoffice.github.io/sdkjs-plugins/content/目录下创建一个文件夹用于存放自己的插件代码

cd onlyoffice.github.io/sdkjs-plugins/content/
mkdir helloword2

创建必备的三个文件 index.htmlopen in new windowconfig.jsonopen in new windowpluginCode.jsopen in new window文件放在里面

index.html

不一定必须是index.html,如果是其他的,需要再config.json中指定

plugins.jsplugins-ui.jsplugins.css 是插件可视化(有页面)所用到的

pluginCode.js 即是我们自定义开发的插件的js文件

div

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>Plugin name</title>
        <script type="text/javascript" src="./js/plugins.js"></script>
        <script type="text/javascript" src="./js/plugins-ui.js"></script>
        <link rel="stylesheet" href="./css/plugins.css">
        <script type="text/javascript" src="pluginCode.js"></script>
    </head>
    <body style="width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;">
        <div id="plugin name" style="margin: 0; padding: 0;"></div>
    </body>
</html>

config.json

{
    "baseUrl": "",
    "group": {
        "name": "Macros",
        "rank": 2
    },
    "guid": "asc.{FFE1F462-1EA2-4391-990D-4CC84940B754}",
    "help": "",
    "minVersion": "6.3.0",
    "name": "plugin name",
    "nameLocale": {
        "fr": "french plugin name",
        "es": "spanish plugin name"
    },
    "offered": "John Smith",
    "variations": [
        {
            "buttons": [
                { 
                    "text": "Cancel",
                    "primary": false,
                    "isviewer": false,
                    "textLocale": {
                        "fr": "Annuler",
                        "es": "Cancelar"
                    }
                }
            ],
            "cryptoDisabledForExternalCloud": "true",
            "cryptoDisabledForInternalCloud": "true",
            "cryptoDisabledOnStart": "true",
            "cryptoMode": "1",
            "description": "plugin description",
            "descriptionLocale": {
                "fr": "french plugin description",
                "es": "spanish plugin description"
            },
            "EditorsSupport": ["word", "cell", "slide", "pdf"],
            "events": ["onClick"],
            "icons": ["./resources/light/icon.png","./resources/light/icon@2x.png"],
   "icons2": [
                {
                    "100%": {"normal": "./resources/light/icon.png"},
     "125%": {"normal": "./resources/light/icon@1.25x.png"},
     "150%": {"normal": "./resources/light/icon@1.5x.png"},
     "175%": {"normal": "./resources/light/icon@1.75x.png"},
     "200%": {"normal": "./resources/light/icon@2x.png"}
    },
    {"style": "dark"}
   ],
            "initData": "",
            "initDataType": "ole",
            "initOnSelectionChanged": true,
            "isCustomWindow": true,
            "isDisplayedInViewer": true,
            "isInsideMode": false,
            "isModal": true,
            "isSystem": false,
            "isUpdateOleOnResize": true,
            "isViewer": true,
            "isVisual": false,
            "menu": "right",
            "screens": ["resources/store/screenshots/screen_1.png"],
            "size": [600, 700],
            "store": {
                "background": {
                    "light": "#F5F5F5",
                    "dark": "#444444"
                },
                "categories": ["specAbilities", "work"],
                "icons": {
                    "light": "resources/store/icons",
                    "dark" : "resources/store/icons"
                },
                "screenshots": ["resources/store/screenshots/screen_1.png"]
            },
            "type": "background",
            "url": "index.html"
        }
    ],
    "version": "1.0"
}

插件对象

(function (window, undefined) {
    window.Asc.plugin.init = function () {
        this.callCommand(function() {
            var oDocument = Api.GetDocument();
            var oParagraph = Api.CreateParagraph();
            oParagraph.AddText("Hello world!");
            oDocument.InsertContent([oParagraph]);
        }, true);
    };
    window.Asc.plugin.button = function (id) {
    };
})(window, undefined);
上次编辑于:
贡献者: 李元昊,liyuanhao