SpringBoot集成onlyoffice实现word文档编辑保存

onlyoffice为一款开源的office在线编辑组件,提供word/excel/ppt编辑保存操作

  • 以下操作均基于centos8系统,officeonly镜像版本7.1.2.23
  • 镜像下载地址:https://yunpan.360.cn/surl_y87CKKcPdY4 (提取码:1f92)
  • 已破解20连接限制
  • 已导入常用中文字体,修改了字号
  • 已取消上传文件大小的限制,修改为500M
  • 隐藏所有操作按钮,隐藏onlyoffice图标和名称,只保基础操作栏目
  • 仅用于word文件和excel文件编辑/保存/查看

yum设置

  • 进入yum的repos目录 cd /etc/yum.repos.d/
cd /etc/yum.repos.d/
  • 修改所有的CentOS文件内容
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*

sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
  • 更新yum源为阿里镜像
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

yum clean all

yum makecache
  • yum安装测试是否可以yum安装
yum install wget –y
  • 安装依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

docker安装

  • 设置镜像源
sudo yum-config-manager --add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 安装docker-ce社区版
sudo yum install docker-ce --allowerasing
  • 创建用户组
建立 Docker 用户组
sudo groupadd docker
添加当前用户到 docker 组
sudo usermod -aG docker $USER
启动docker
systemctl start docker.service
服务开机启动
systemctl enable docker.service
  • 安装docker图形化管理页面
docker volume create portainer_data

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

访问http://localhost:9000/进行管理端初始化设置

onlyoffice部署

  • 上传镜像文件到服务器
  • 载入镜像
docker load < onlyoffice.tar
  • 查看镜像
docker images
  • 启动容器
sudo docker run --name=onlyoffice -i -t -d -p  8088:80 --restart=always 镜像id
  • 安装VMWare虚拟机,安装centos8系统,参照上述步骤
  • 网络配置成NAT模式,虚拟机进入centos系统后配置固定ip
  • NAT网卡设置端口转发,转发9000和8088端口,主机端口和虚拟端口一致

  • 找到对应字体,如果是windows下的字体进入C:\Windows\Fonts 搜索

  • 安装High-Logic FontCreator 运行Keygen.exe 点击generate获取激活码
  • 工具下载:https://yunpan.360.cn/surl_y87CK8RNr8N (提取码:7059)
  • 打开字体 font=>properties
  • 修改 font family 为custom 中对应的中文 ,导出字体
  • 上传修改后的字体到liunx文件下 eg:/home/fonts/
  • 查看OnlyOffice容器id
docker ps
  • 进入OnlyOffice容器
docker exec -it 容器id /bin/bash
  • 删除字体缓存
cd /var/www/onlyoffice/documentserver/fonts

rm -rf *
  • 复制字体到 /var/www/onlyoffice/documentserver/core-fonts 下
docker cp /home/fonts onlyoffice:/var/www/onlyoffice/documentserver/core-fonts
  • 进入onlyoffice容器执行刷新
/usr/bin/documentserver-generate-allfonts.sh
  • 浏览器清除缓存重新刷新

引入api.js

不能下载文件本地引用,一定要在线引用


声明dom

页面添加一个div,用于渲染编辑器

页面渲染

参数说明

key:对应文档的一个标识,建议前端随机生成,防止重复

url:打开文档的地址,返回流数据

fileType:文档类型,例如:doc/docx

title:文件名称,例如:2022年工作方案.docx

model:打开模式,例如:edit(编辑模式)/view(阅读模式)

callbackUrl:文件修改后保存回调地址

function initDoc(key, url, fileType, title, model, callbackUrl) {
                let config = {
                    "document": {
                        "documentType": "text",
                        "width": "100%", //&#x6253;&#x5F00;&#x7A97;&#x53E3;&#x5BBD;&#x5EA6;
                        "height": "100%", //&#x6253;&#x5F00;&#x7A97;&#x53E3;&#x9AD8;&#x5EA6;
                        "fileType": fileType, //&#x6587;&#x6863;&#x7C7B;&#x578B;
                        "key": key, //&#x5B9A;&#x4E49;&#x7528;&#x4E8E;&#x670D;&#x52A1;&#x8BC6;&#x522B;&#x6587;&#x6863;&#x7684;&#x552F;&#x4E00;&#x6587;&#x6863;&#x6807;&#x8BC6;&#x7B26;&#x3002;&#x6BCF;&#x6B21;&#x7F16;&#x8F91;&#x548C;&#x4FDD;&#x5B58;&#x6587;&#x6863;&#x65F6;&#xFF0C;&#x90FD;&#x5FC5;&#x987B;&#x91CD;&#x65B0;&#x751F;&#x6210;&#x5BC6;&#x94A5;&#x3002;&#x957F;&#x5EA6;&#x9650;&#x5236;&#x4E3A;128&#x4E2A;&#x7B26;&#x53F7;&#x3002;
                        "title": title, //&#x4E3A;&#x67E5;&#x770B;&#x6216;&#x7F16;&#x8F91;&#x7684;&#x6587;&#x6863;&#x5B9A;&#x4E49;&#x6240;&#x9700;&#x7684;&#x6587;&#x4EF6;&#x540D;&#xFF0C;&#x8BE5;&#x6587;&#x4EF6;&#x540D;&#x4E5F;&#x5C06;&#x5728;&#x4E0B;&#x8F7D;&#x6587;&#x6863;&#x65F6;&#x7528;&#x4F5C;&#x6587;&#x4EF6;&#x540D;&#x3002;&#x957F;&#x5EA6;&#x9650;&#x5236;&#x4E3A;128&#x4E2A;&#x7B26;&#x53F7;&#x3002;
                        "url": url, //&#x5B9A;&#x4E49;&#x5B58;&#x50A8;&#x539F;&#x59CB;&#x67E5;&#x770B;&#x6216;&#x7F16;&#x8F91;&#x7684;&#x6587;&#x6863;&#x7684;&#x7EDD;&#x5BF9;URL
                        "info": {
                            "owner": "&#x738B;&#x91CD;&#x9633;", //&#x6587;&#x4EF6;&#x521B;&#x5EFA;&#x8005;&#x540D;&#x79F0;
                            "sharingSettings": [ //&#x6587;&#x4EF6;&#x5BF9;&#x5E94;&#x7528;&#x6237;&#x7684;&#x64CD;&#x4F5C;&#x6743;&#x9650;&#x914D;&#x7F6E;
                                {
                                    "permissions": "Full Access", // &#x5B8C;&#x5168;&#x64CD;&#x4F5C;&#x6743;&#x9650;-Full Access,&#x53EA;&#x8BFB;&#x6743;&#x9650;-Read Only &#x62D2;&#x7EDD;&#x8BBF;&#x95EE;-Deny Access
                                    "user": "&#x6797;&#x671D;&#x82F1;" //&#x6709;&#x6B21;&#x6743;&#x9650;&#x7684;&#x7528;&#x6237;
                                },
                                {
                                    "permissions": "Read Only",
                                    "user": "&#x5468;&#x4F2F;&#x901A;"
                                },
                            ],
                            "uploaded": "2010-07-07 3:46 PM" //&#x6587;&#x4EF6;&#x521B;&#x5EFA;&#x65F6;&#x95F4;
                        },
                        //&#x6587;&#x6863;&#x6743;&#x9650;&#x53C2;&#x6570;
                        "permissions": {
                            "edit": true, //&#xFF08;&#x6587;&#x4EF6;&#x662F;&#x5426;&#x53EF;&#x4EE5;&#x7F16;&#x8F91;&#xFF0C;false&#x65F6;&#x6587;&#x4EF6;&#x4E0D;&#x53EF;&#x7F16;&#x8F91;&#xFF09;
                            "fillForms": true, //&#x5B9A;&#x4E49;&#x662F;&#x5426;&#x80FD;&#x5728;&#x6587;&#x6863;&#x4E2D;&#x586B;&#x5145;&#x8868;&#x5355;
                            "print": true, //&#x5B9A;&#x4E49;&#x6587;&#x6863;&#x662F;&#x5426;&#x80FD;&#x6253;&#x5370;
                            "review": false, //&#x7B2C;&#x4E00;&#x662F;&#x5426;&#x663E;&#x793A;&#x5BA1;&#x9605;&#x6587;&#x6863;&#x83DC;&#x5355;
                            "comment": true, //&#x5B9A;&#x4E49;&#x662F;&#x5426;&#x53EF;&#x4EE5;&#x6CE8;&#x91CA;&#x6587;&#x6863;&#x3002;&#x5982;&#x679C;&#x6CE8;&#x91CA;&#x6743;&#x9650;&#x8BBE;&#x7F6E;&#x4E3A;&#x201C; true&#x201D;&#xFF0C;&#x5219;&#x6587;&#x6863;&#x4FA7;&#x680F;&#x5C06;&#x5305;&#x542B;&#x201C;&#x6CE8;&#x91CA;&#x201D;&#x83DC;&#x5355;&#x9009;&#x9879;&#xFF1B;&#x53EA;&#x6709;&#x5C06;mode&#x53C2;&#x6570;&#x8BBE;&#x7F6E;&#x4E3A;edit&#x65F6;&#x624D;&#x751F;&#x6548;&#xFF0C;&#x9ED8;&#x8BA4;&#x503C;&#x4E0E;edit&#x53C2;&#x6570;&#x7684;&#x503C;&#x4E00;&#x81F4;&#x3002;
                            "copy": true, //&#x662F;&#x5426;&#x5141;&#x8BB8;&#x60A8;&#x5C06;&#x5185;&#x5BB9;&#x590D;&#x5236;&#x5230;&#x526A;&#x8D34;&#x677F;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#x3002;
                            "download": true, //&#x5B9A;&#x4E49;&#x662F;&#x5426;&#x53EF;&#x4EE5;&#x4E0B;&#x8F7D;&#x6587;&#x6863;&#x6216;&#x4EC5;&#x5728;&#x7EBF;&#x67E5;&#x770B;&#x6216;&#x7F16;&#x8F91;&#x6587;&#x6863;&#x3002;&#x5982;&#x679C;&#x4E0B;&#x8F7D;&#x6743;&#x9650;&#x8BBE;&#x7F6E;&#x4E3A;&#x201C;false&#x201D;&#x4E0B;&#x8F7D;&#x4E3A;&#x83DC;&#x5355;&#x9009;&#x9879;&#x5C06;&#x6CA1;&#x6709;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#x3002;
                            "modifyContentControl": true, //&#x5B9A;&#x4E49;&#x662F;&#x5426;&#x53EF;&#x4EE5;&#x66F4;&#x6539;&#x5185;&#x5BB9;&#x63A7;&#x4EF6;&#x8BBE;&#x7F6E;&#x3002;&#x4EC5;&#x5F53;mode&#x53C2;&#x6570;&#x8BBE;&#x7F6E;&#x4E3A;edit&#x65F6;&#xFF0C;&#x5185;&#x5BB9;&#x63A7;&#x4EF6;&#x4FEE;&#x6539;&#x624D;&#x53EF;&#x7528;&#x4E8E;&#x6587;&#x6863;&#x7F16;&#x8F91;&#x5668;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#x3002;
                            "modifyFilter": true, //&#x5B9A;&#x4E49;&#x8FC7;&#x6EE4;&#x5668;&#x662F;&#x5426;&#x53EF;&#x4EE5;&#x5168;&#x5C40;&#x5E94;&#x7528;&#xFF08;true&#xFF09;&#x5F71;&#x54CD;&#x6240;&#x6709;&#x5176;&#x4ED6;&#x7528;&#x6237;&#xFF0C;&#x6216;&#x5C40;&#x90E8;&#x5E94;&#x7528;&#xFF08;false&#xFF09;&#xFF0C;&#x5373;&#x4EC5;&#x9002;&#x7528;&#x4E8E;&#x5F53;&#x524D;&#x7528;&#x6237;&#x3002;&#x5982;&#x679C;&#x5C06;mode&#x53C2;&#x6570;&#x8BBE;&#x7F6E;&#x4E3A;edit&#xFF0C;&#x5219;&#x8FC7;&#x6EE4;&#x5668;&#x4FEE;&#x6539;&#x4EC5;&#x5BF9;&#x7535;&#x5B50;&#x8868;&#x683C;&#x7F16;&#x8F91;&#x5668;&#x53EF;&#x7528;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#x3002;
                        }
                    },
                    // type: "embedded",
                    //&#x6253;&#x5F00;&#x6587;&#x6863;&#x7C7B;&#x578B;
                    // text&#x5BF9;&#x5E94;&#x5404;&#x79CD;&#x6587;&#x6863;&#x7C7B;&#x578B;(.doc, .docm, .docx, .dot, .dotm, .dotx, .epub, .fodt, .htm, .html, .mht, .odt, .ott, .pdf, .rtf, .txt, .djvu, .xps)
                    //spreadsheet&#x5BF9;&#x5E94;&#x8868;&#x683C;&#x7C7B;&#x578B;(.csv, .fods, .ods, .ots, .xls, .xlsm, .xlsx, .xlt, .xltm, .xltx)
                    //presentation&#x5BF9;&#x5E94;PPT&#x7C7B;&#x578B;(.fodp, .odp, .otp, .pot, .potm, .potx, .pps, .ppsm, .ppsx, .ppt, .pptm, .pptx)
                    "editorConfig": { //&#x7F16;&#x8F91;&#x914D;&#x7F6E;
                        "createUrl": "http://docServer:port/url-to-create-document/", //&#x6307;&#x5B9A;&#x521B;&#x5EFA;&#x6587;&#x4EF6;&#x7684;&#x9875;&#x9762;,&#x6DFB;&#x52A0;&#x8BE5;&#x914D;&#x7F6E;&#x540E;&#x6587;&#x6863;&#x670D;&#x52A1;&#x5668;&#x63D2;&#x4EF6;&#x624D;&#x4F1A;&#x663E;&#x793A;&#x65B0;&#x5EFA;&#x6587;&#x4EF6;&#x6309;&#x94AE;
                        "mode": model, //&#x6587;&#x6863;&#x64CD;&#x4F5C;&#x6A21;&#x5F0F; view &#x89C6;&#x56FE;&#x6A21;&#x5F0F;&#x4E0D;&#x53EF;&#x7F16;&#x8F91;  edit &#x7F16;&#x8F91;&#x6A21;&#x5F0F;&#x53EF;&#x7F16;&#x8F91;&#x6587;&#x6863;
                        "callbackUrl": callbackUrl, //&#x4FDD;&#x5B58;&#x6587;&#x4EF6;&#x65F6;&#x7684;&#x56DE;&#x8C03;&#x5730;&#x5740;
                        "lang": "zh-CN", //&#x8BED;&#x8A00;&#x73AF;&#x5883;
                        "customization": { //&#x5B9A;&#x5236;&#x90E8;&#x5206;&#x5141;&#x8BB8;&#x81EA;&#x5B9A;&#x4E49;&#x7F16;&#x8F91;&#x5668;&#x754C;&#x9762;&#xFF0C;&#x4F7F;&#x5176;&#x770B;&#x8D77;&#x6765;&#x50CF;&#x60A8;&#x7684;&#x5176;&#x4ED6;&#x4EA7;&#x54C1;&#xFF0C;&#x5E76;&#x66F4;&#x6539;&#x662F;&#x5426;&#x5B58;&#x5728;&#x5176;&#x4ED6;&#x6309;&#x94AE;&#xFF0C;&#x94FE;&#x63A5;&#xFF0C;&#x66F4;&#x6539;&#x5FBD;&#x6807;&#x548C;&#x7F16;&#x8F91;&#x8005;&#x6240;&#x6709;&#x8005;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;&#x3002;
                            "help": false, //&#x5B9A;&#x4E49;&#x662F;&#x663E;&#x793A;&#x8FD8;&#x662F;&#x9690;&#x85CF;&#x201C;&#x5E2E;&#x52A9;&#x201D;&#x83DC;&#x5355;&#x6309;&#x94AE;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#x3002;
                            "hideRightMenu": false, //&#x5B9A;&#x4E49;&#x5728;&#x7B2C;&#x4E00;&#x6B21;&#x52A0;&#x8F7D;&#x65F6;&#x662F;&#x663E;&#x793A;&#x8FD8;&#x662F;&#x9690;&#x85CF;&#x53F3;&#x4FA7;&#x83DC;&#x5355;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;false&#x3002;
                            "autosave": false, //&#x5B9A;&#x4E49;&#x662F;&#x542F;&#x7528;&#x8FD8;&#x662F;&#x7981;&#x7528;&#x201C;&#x81EA;&#x52A8;&#x4FDD;&#x5B58;&#x201D;&#x83DC;&#x5355;&#x9009;&#x9879;&#x3002;&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;&#x5982;&#x679C;&#x60A8;&#x5728;&#x83DC;&#x5355;&#x4E2D;&#x66F4;&#x6539;&#x6B64;&#x9009;&#x9879;&#xFF0C;&#x5B83;&#x5C06;&#x88AB;&#x4FDD;&#x5B58;&#x5230;&#x6D4F;&#x89C8;&#x5668;&#x7684;localStorage&#x4E2D;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#x3002;
                            "forcesave": true, //&#x5B9A;&#x4E49;&#x4FDD;&#x5B58;&#x6309;&#x94AE;&#x662F;&#x5426;&#x663E;&#x793A;&#x9ED8;&#x8BA4;false
                            "chat": false, //&#x5B9A;&#x4E49;&#x201C;&#x804A;&#x5929;&#x201D;&#x83DC;&#x5355;&#x6309;&#x94AE;&#x662F;&#x663E;&#x793A;&#x8FD8;&#x662F;&#x9690;&#x85CF;&#xFF1B;&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;&#x5982;&#x679C;&#x60A8;&#x9690;&#x85CF;&#x201C;&#x804A;&#x5929;&#x201D;&#x6309;&#x94AE;&#xFF0C;&#x5219;&#x76F8;&#x5E94;&#x7684;&#x804A;&#x5929;&#x529F;&#x80FD;&#x4E5F;&#x5C06;&#x88AB;&#x7981;&#x7528;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#x3002;
                            "commentAuthorOnly": false, //&#x5B9A;&#x4E49;&#x7528;&#x6237;&#x662F;&#x5426;&#x53EA;&#x80FD;&#x7F16;&#x8F91;&#x548C;&#x5220;&#x9664;&#x4ED6;&#x7684;&#x8BC4;&#x8BBA;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;false&#x3002;
                            "comments": false, //&#x5B9A;&#x4E49;&#x662F;&#x663E;&#x793A;&#x8FD8;&#x662F;&#x9690;&#x85CF;&#x201C;&#x6CE8;&#x91CA;&#x201D;&#x83DC;&#x5355;&#x6309;&#x94AE;&#xFF1B;&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;&#x5982;&#x679C;&#x60A8;&#x9690;&#x85CF;&#x201C;&#x8BC4;&#x8BBA;&#x201D;&#x6309;&#x94AE;&#xFF0C;&#x5219;&#x76F8;&#x5E94;&#x7684;&#x8BC4;&#x8BBA;&#x529F;&#x80FD;&#x5C06;&#x4EC5;&#x53EF;&#x7528;&#x4E8E;&#x67E5;&#x770B;&#xFF0C;&#x8BC4;&#x8BBA;&#x7684;&#x6DFB;&#x52A0;&#x548C;&#x7F16;&#x8F91;&#x5C06;&#x4E0D;&#x53EF;&#x7528;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#x3002;
                            "compactHeader": false, //&#x5B9A;&#x4E49;&#x662F;&#x5426;&#x5C06;&#x83DC;&#x5355;&#x680F;&#x653E;&#x5728;&#x5728;&#x5FBD;&#x6807;&#x65C1;&#x8FB9;&#x4F7F;&#x754C;&#x9762;&#x66F4;&#x52A0;&#x7D27;&#x51D1;&#x9ED8;&#x8BA4;false&#x3002;
                            "compactToolbar": false, //&#x5B9A;&#x4E49;&#x663E;&#x793A;&#x7684;&#x9876;&#x90E8;&#x5DE5;&#x5177;&#x680F;&#x7C7B;&#x578B;&#x662F;&#x5B8C;&#x6574;&#xFF08;false&#xFF09;&#x8FD8;&#x662F;&#x7D27;&#x51D1;true&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;false &#x591A;&#x4F59;&#x83DC;&#x5355;&#x5C06;&#x5728;&#x53F3;&#x4FA7;&#x6298;&#x53E0;&#x70B9;&#x51FB;&#x663E;&#x793A;&#x3002;
                            "compatibleFeatures": false, //&#x5B9A;&#x4E49;&#x4EC5;&#x4E0E;OOXML&#x683C;&#x5F0F;&#x517C;&#x5BB9;&#x7684;&#x529F;&#x80FD;&#x7684;&#x4F7F;&#x7528;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x4E0D;&#x8981;&#x5728;&#x6574;&#x4E2A;&#x6587;&#x6863;&#x4E0A;&#x4F7F;&#x7528;&#x6CE8;&#x91CA;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;false&#x3002;
                            "macros": false, //&#x5B9A;&#x4E49;&#x662F;&#x5426;&#x5C06;&#x8FD0;&#x884C;&#x6587;&#x6863;&#x5B8F;&#x4EE5;&#x53CA;&#x53EF;&#x7528;&#x7684;&#x5B8F;&#x8BBE;&#x7F6E;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#x3002;
                            "macrosMode": "warn", //&#x5B9A;&#x4E49;&#x662F;&#x5426;&#x5C06;&#x8FD0;&#x884C;&#x6587;&#x6863;&#x5B8F;&#x3002;&#x53EF;&#x4EE5;&#x91C7;&#x7528;&#x4EE5;&#x4E0B;&#x503C;&#xFF1A; disable -&#x6839;&#x672C;&#x4E0D;&#x8FD0;&#x884C;&#xFF1B;enable -&#x81EA;&#x52A8;&#x8FD0;&#x884C;&#x6240;&#x6709;&#x5B8F;&#xFF1B;warn -&#x8B66;&#x544A;&#x5B8F;&#x5E76;&#x8BF7;&#x6C42;&#x5141;&#x8BB8;&#x8FD0;&#x884C;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;original&#x3002;
                            "plugins": false, //&#x5B9A;&#x4E49;&#x662F;&#x5426;&#x5C06;&#x542F;&#x52A8;&#x63D2;&#x4EF6;&#x5E76;&#x53EF;&#x7528;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#x3002;
                            "showReviewChanges": false, //&#x5B9A;&#x4E49;&#x5728;&#x52A0;&#x8F7D;&#x7F16;&#x8F91;&#x5668;&#x65F6;&#x662F;&#x5426;&#x81EA;&#x52A8;&#x663E;&#x793A;&#x6216;&#x9690;&#x85CF;&#x5BA1;&#x9605;&#x66F4;&#x6539;&#x9762;&#x677F;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;false&#x3002;
                            "spellcheck": false, //&#x5B9A;&#x4E49;&#x5728;&#x52A0;&#x8F7D;&#x7F16;&#x8F91;&#x5668;&#x65F6;&#x662F;&#x5426;&#x81EA;&#x52A8;&#x6253;&#x5F00;&#x6216;&#x5173;&#x95ED;&#x62FC;&#x5199;&#x68C0;&#x67E5;&#x5668;&#x3002;&#x62FC;&#x5199;&#x68C0;&#x67E5;&#x5668;&#x4EC5;&#x9002;&#x7528;&#x4E8E;&#x6587;&#x6863;&#x7F16;&#x8F91;&#x5668;&#x548C;&#x6F14;&#x793A;&#x6587;&#x7A3F;&#x7F16;&#x8F91;&#x5668;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#x3002;
                            "toolbarNoTabs": false, //&#x5B9A;&#x4E49;&#x662F;&#x7A81;&#x51FA;&#x663E;&#x793A;&#x9876;&#x90E8;&#x5DE5;&#x5177;&#x680F;&#x9009;&#x9879;&#x5361;&#x6837;&#x5F0F;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;false&#x3002;
                            "unit": "cm", //&#x5B9A;&#x4E49;&#x5728;&#x6807;&#x5C3A;&#x548C;&#x5BF9;&#x8BDD;&#x6846;&#x4E2D;&#x4F7F;&#x7528;&#x7684;&#x5EA6;&#x91CF;&#x5355;&#x4F4D;&#x3002;&#x53EF;&#x4EE5;&#x91C7;&#x7528;&#x4EE5;&#x4E0B;&#x503C;&#xFF1A;cm -&#x5398;&#x7C73;&#xFF0C;pt-&#x70B9;&#xFF0C;inch -&#x82F1;&#x5BF8;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;&#x5398;&#x7C73;&#xFF08;cm&#xFF09;&#x3002;
                            "zoom": 100, //&#x5B9A;&#x4E49;&#x4EE5;&#x767E;&#x5206;&#x6BD4;&#x4E3A;&#x5355;&#x4F4D;&#x7684;&#x6587;&#x6863;&#x663E;&#x793A;&#x7F29;&#x653E;&#x503C;&#x3002;&#x53EF;&#x4EE5;&#x53D6;&#x5927;&#x4E8E;0&#x7684;&#x503C;&#x3002;&#x5BF9;&#x4E8E;&#x6587;&#x672C;&#x6587;&#x6863;&#x548C;&#x6F14;&#x793A;&#x6587;&#x7A3F;&#xFF0C;&#x53EF;&#x4EE5;&#x5C06;&#x6B64;&#x53C2;&#x6570;&#x8BBE;&#x7F6E;&#x4E3A;-1&#xFF08;&#x4F7F;&#x6587;&#x6863;&#x9002;&#x5408;&#x9875;&#x9762;&#x9009;&#x9879;&#xFF09;&#x6216;-2&#xFF08;&#x4F7F;&#x6587;&#x6863;&#x9875;&#x9762;&#x5BBD;&#x5EA6;&#x9002;&#x5408;&#x7F16;&#x8F91;&#x5668;&#x9875;&#x9762;&#xFF09;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;100&#x3002;
                            "customer": { //&#x5173;&#x4E8E; &#x6587;&#x6863;&#x7F16;&#x8F91;&#x5668;&#x7684;&#x663E;&#x793A;&#x4FE1;&#x606F;
                                "address": "My City, 123a-45", //&#x6709;&#x6743;&#x8BBF;&#x95EE;&#x7F16;&#x8F91;&#x6216;&#x7F16;&#x8F91;&#x4F5C;&#x8005;&#x7684;&#x516C;&#x53F8;&#x6216;&#x4E2A;&#x4EBA;&#x7684;&#x90AE;&#x653F;&#x5730;&#x5740;&#xFF0C;
                                "info": "Some additional information", //&#x6709;&#x5173;&#x60A8;&#x5E0C;&#x671B;&#x5176;&#x4ED6;&#x4EBA;&#x8BA4;&#x8BC6;&#x7684;&#x516C;&#x53F8;&#x6216;&#x4E2A;&#x4EBA;&#x7684;&#x4E00;&#x4E9B;&#x5176;&#x4ED6;&#x4FE1;&#x606F;&#xFF0C;
                                "logo": "https://example.com/logo-big.png", //&#x56FE;&#x7247;&#x5FBD;&#x6807;&#x7684;&#x8DEF;&#x5F84;&#xFF08;&#x6B64;&#x6587;&#x4EF6;&#x6CA1;&#x6709;&#x7279;&#x522B;&#x5EFA;&#x8BAE;&#xFF0C;&#x4F46;&#x662F;&#x5982;&#x679C;&#x4F7F;&#x7528;&#x900F;&#x660E;&#x80CC;&#x666F;&#x7684;.png&#x683C;&#x5F0F;&#x4F1A;&#x66F4;&#x597D;&#xFF09;&#x3002;&#x56FE;&#x7247;&#x5FC5;&#x987B;&#x5177;&#x6709;&#x4EE5;&#x4E0B;&#x5C3A;&#x5BF8;&#xFF1A;432x70&#xFF0C;
                                "mail": "john@example.com", //&#x6709;&#x6743;&#x8BBF;&#x95EE;&#x7F16;&#x8F91;&#x8005;&#x6216;&#x7F16;&#x8F91;&#x8005;&#x7684;&#x516C;&#x53F8;&#x6216;&#x4E2A;&#x4EBA;&#x7684;&#x7535;&#x5B50;&#x90AE;&#x4EF6;&#x5730;&#x5740;
                                "name": "&#x6B27;&#x9633;&#x950B;", //&#x8BE5;&#x516C;&#x53F8;&#x6216;&#x4E2A;&#x4EBA;&#x7684;&#x8C01;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x7F16;&#x8F91;&#x6216;&#x7F16;&#x8F91;&#x4F5C;&#x8005;&#xFF0C;&#x540D;&#x79F0;
                                "www": "example.com" //&#x4EE5;&#x4E0A;&#x516C;&#x53F8;&#x6216;&#x4E2A;&#x4EBA;&#x7684;&#x5BB6;&#x5EAD;&#x7F51;&#x7AD9;&#x5730;&#x5740;&#xFF0C;
                            },
                            "feedback": { //&#x53CD;&#x9988;&#x914D;&#x7F6E;&#x4FE1;&#x606F;
                                "url": "https://example.com", //&#x5355;&#x51FB;&#x201C;&#x53CD;&#x9988;&#x548C;&#x652F;&#x6301;&#x201D;&#x83DC;&#x5355;&#x6309;&#x94AE;&#x65F6;&#x5C06;&#x6253;&#x5F00;&#x7684;&#x7F51;&#x7AD9;&#x5730;&#x5740;&#x7684;&#x7EDD;&#x5BF9;URL &#xFF0C;
                                "visible": false //&#x663E;&#x793A;&#x6216;&#x9690;&#x85CF;&#x201C;&#x53CD;&#x9988;&#x548C;&#x652F;&#x6301;&#x201D;&#x83DC;&#x5355;&#x6309;&#x94AE;&#xFF0C;
                            },
                            "goback": { //&#x5B9A;&#x4E49;&#x201C;&#x6253;&#x5F00;&#x6587;&#x4EF6;&#x4F4D;&#x7F6E;&#x201D;&#x83DC;&#x5355;&#x6309;&#x94AE;&#x548C;&#x53F3;&#x4E0A;&#x89D2;&#x6309;&#x94AE;&#x7684;&#x8BBE;&#x7F6E;&#x3002;&#x8BE5;&#x5BF9;&#x8C61;&#x5177;&#x6709;&#x4EE5;&#x4E0B;&#x53C2;&#x6570;&#xFF1A;
                                "blank": true, //&#x5728;&#x65B0;&#x7684;&#x6D4F;&#x89C8;&#x5668;&#x9009;&#x9879;&#x5361;/&#x7A97;&#x53E3;&#xFF08;&#x5982;&#x679C;&#x503C;&#x8BBE;&#x7F6E;&#x4E3A;true&#xFF09;&#x6216;&#x5F53;&#x524D;&#x9009;&#x9879;&#x5361;&#xFF08;&#x5982;&#x679C;&#x503C;&#x8BBE;&#x7F6E;&#x4E3A;false&#xFF09;&#x4E2D;&#x6253;&#x5F00;&#x7F51;&#x7AD9;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;true&#xFF0C;
                                "requestClose": false, //&#x5B9A;&#x4E49;&#x5982;&#x679C;&#x5355;&#x51FB;&#x201C;&#x6253;&#x5F00;&#x6587;&#x4EF6;&#x4F4D;&#x7F6E;&#x201D;&#x6309;&#x94AE;&#xFF0C;&#x5219;&#x8C03;&#x7528;events.onRequestClose&#x4E8B;&#x4EF6;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x6253;&#x5F00;&#x6D4F;&#x89C8;&#x5668;&#x9009;&#x9879;&#x5361;&#x6216;&#x7A97;&#x53E3;&#x3002;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;false&#xFF0C;
                                "text": "Open file location", //&#x5C06;&#x5728;&#x201C;&#x6253;&#x5F00;&#x6587;&#x4EF6;&#x4F4D;&#x7F6E;&#x201D;&#x83DC;&#x5355;&#x6309;&#x94AE;&#x548C;&#x53F3;&#x4E0A;&#x89D2;&#x6309;&#x94AE;&#xFF08;&#x5373;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x201C;&#x8F6C;&#x5230;&#x6587;&#x6863;&#x201D;&#xFF09;&#x4E0A;&#x663E;&#x793A;&#x7684;&#x6587;&#x672C;&#xFF0C;
                                "url": "https://example.com" //&#x5355;&#x51FB;&#x201C;&#x6253;&#x5F00;&#x6587;&#x4EF6;&#x4F4D;&#x7F6E;&#x201D;&#x83DC;&#x5355;&#x6309;&#x94AE;&#x65F6;&#x5C06;&#x6253;&#x5F00;&#x7684;&#x7F51;&#x7AD9;&#x5730;&#x5740;&#x7684;&#x7EDD;&#x5BF9;URL &#xFF0C;
                            },
                            "logo": {
                                "image": "https://example.com/logo.png", //&#x56FE;&#x50CF;&#x6587;&#x4EF6;&#x7684;&#x8DEF;&#x5F84;&#xFF0C;&#x7528;&#x4E8E;&#x5728;&#x666E;&#x901A;&#x5DE5;&#x4F5C;&#x6A21;&#x5F0F;&#x4E0B;&#x663E;&#x793A;&#xFF08;&#x5373;&#xFF0C;&#x5728;&#x6240;&#x6709;&#x7F16;&#x8F91;&#x5668;&#x7684;&#x67E5;&#x770B;&#x548C;&#x7F16;&#x8F91;&#x6A21;&#x5F0F;&#x4E0B;&#xFF09;&#x3002;&#x56FE;&#x7247;&#x5FC5;&#x987B;&#x5177;&#x6709;&#x4EE5;&#x4E0B;&#x5C3A;&#x5BF8;&#xFF1A;172x40&#xFF0C;
                                "imageEmbedded": "https://example.com/logo_em.png", //&#x7528;&#x4E8E;&#x4EE5;&#x5D4C;&#x5165;&#x5F0F;&#x6A21;&#x5F0F;&#x663E;&#x793A;&#x7684;&#x56FE;&#x50CF;&#x6587;&#x4EF6;&#x7684;&#x8DEF;&#x5F84;&#xFF08;&#x8BF7;&#x53C2;&#x9605;config&#x90E8;&#x5206;&#x4EE5;&#x4E86;&#x89E3;&#x5982;&#x4F55;&#x5B9A;&#x4E49;&#x5D4C;&#x5165;&#x5F0F;&#x6587;&#x6863;&#x7C7B;&#x578B;&#xFF09;&#x3002;&#x56FE;&#x7247;&#x5FC5;&#x987B;&#x5177;&#x6709;&#x4EE5;&#x4E0B;&#x5C3A;&#x5BF8;&#xFF1A;248x40&#xFF0C;
                                "url": "https://www.baidu.com" //&#x67D0;&#x4EBA;&#x5355;&#x51FB;&#x5FBD;&#x6807;&#x56FE;&#x50CF;&#x65F6;&#x5C06;&#x4F7F;&#x7528;&#x7684;&#x7EDD;&#x5BF9;URL&#xFF08;&#x53EF;&#x7528;&#x4E8E;&#x8F6C;&#x5230;&#x60A8;&#x7684;&#x7F51;&#x7AD9;&#x7B49;&#xFF09;&#x3002;&#x4FDD;&#x7559;&#x4E3A;&#x7A7A;&#x5B57;&#x7B26;&#x4E32;&#x6216;null&#x4EE5;&#x4F7F;&#x5FBD;&#x6807;&#x4E0D;&#x53EF;&#x5355;&#x51FB;&#xFF0C;
                            },
                        },
                        "user": { //&#x7528;&#x6237;&#x4FE1;&#x606F;
                            "id": "admin", //&#x7528;&#x6237;ID
                            "name": "&#x64CD;&#x4F5C;&#x5458;" //&#x7528;&#x6237;&#x5168;&#x540D;&#x79F0;
                        },
                        "embedded": { //Embedded&#x90E8;&#x5206;&#x4EC5;&#x9002;&#x7528;&#x4E8E;&#x5D4C;&#x5165;&#x5F0F;&#x6587;&#x6863;&#x7C7B;&#x578B;&#xFF08;&#x8BF7;&#x53C2;&#x9605;config&#x90E8;&#x5206;&#x4EE5;&#x4E86;&#x89E3;&#x5982;&#x4F55;&#x5B9A;&#x4E49;&#x5D4C;&#x5165;&#x5F0F;&#x6587;&#x6863;&#x7C7B;&#x578B;&#xFF09;&#x3002;&#x5B83;&#x5141;&#x8BB8;&#x66F4;&#x6539;&#x8BBE;&#x7F6E;&#xFF0C;&#x8FD9;&#x4E9B;&#x8BBE;&#x7F6E;&#x5B9A;&#x4E49;&#x5D4C;&#x5165;&#x5F0F;&#x6A21;&#x5F0F;&#x4E0B;&#x6309;&#x94AE;&#x7684;&#x884C;&#x4E3A;&#x3002;
                            "embedUrl": "https://example.com/embedded?doc=exampledocument1.docx", //&#x5B9A;&#x4E49;&#x6587;&#x6863;&#x7684;&#x7EDD;&#x5BF9;URL&#xFF0C;&#x4EE5;&#x4F5C;&#x4E3A;&#x5D4C;&#x5165;&#x5230;&#x7F51;&#x9875;&#x4E2D;&#x7684;&#x6587;&#x6863;&#x7684;&#x6E90;&#x6587;&#x4EF6;
                            "fullscreenUrl": "https://example.com/embedded?doc=exampledocument1.docx#fullscreen", //&#x5B9A;&#x4E49;&#x5C06;&#x4EE5;&#x5168;&#x5C4F;&#x6A21;&#x5F0F;&#x6253;&#x5F00;&#x7684;&#x6587;&#x6863;&#x7684;&#x7EDD;&#x5BF9;URL&#x3002;
                            "saveUrl": "https://example.com/download?doc=exampledocument1.docx", //&#x5B9A;&#x4E49;&#x5141;&#x8BB8;&#x5C06;&#x6587;&#x6863;&#x4FDD;&#x5B58;&#x5230;&#x7528;&#x6237;&#x4E2A;&#x4EBA;&#x8BA1;&#x7B97;&#x673A;&#x4E0A;&#x7684;&#x7EDD;&#x5BF9;URL&#x3002;
                            "shareUrl": "https://example.com/view?doc=exampledocument1.docx", //&#x5B9A;&#x4E49;&#x5141;&#x8BB8;&#x5176;&#x4ED6;&#x7528;&#x6237;&#x5171;&#x4EAB;&#x6B64;&#x6587;&#x6863;&#x7684;&#x7EDD;&#x5BF9;URL&#x3002;
                            "toolbarDocked": "top" //&#x5B9A;&#x4E49;&#x5D4C;&#x5165;&#x5F0F;&#x67E5;&#x770B;&#x5668;&#x5DE5;&#x5177;&#x680F;&#x7684;&#x4F4D;&#x7F6E;&#xFF0C;&#x53EF;&#x4EE5;&#x4E3A;top&#x6216;bottom&#x3002;
                        }
                    },

                    "events": { //&#x4E8B;&#x4EF6;&#x914D;&#x7F6E;
                        // onAppReady,//-&#x5C06;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x52A0;&#x8F7D;&#x5230;&#x6D4F;&#x89C8;&#x5668;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;
                        // onCollaborativeChanges //-&#x5F53;&#x6587;&#x6863;&#x7531;&#x5176;&#x4ED6;&#x7528;&#x6237;&#x5728;&#x4E25;&#x683C;&#x5171;&#x540C;&#x7F16;&#x8F91;&#x6A21;&#x5F0F;&#x4E0B;&#x5171;&#x540C;&#x7F16;&#x8F91;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;
                        // onDocumentReady,//-&#x5C06;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x52A0;&#x8F7D;&#x5230;&#x6D4F;&#x89C8;&#x5668;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;
                        // onDocumentStateChange,//-&#x4FEE;&#x6539;&#x6587;&#x6863;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x8FD9;&#x5C31;&#x662F;&#x6240;&#x8C13;&#x7684;&#x4F7F;&#x7528;&#x53C2;&#x6570;&#xFF1A;{&#x771F;&#x6B63;&#x7684;&#x201C;&#x6570;&#x636E;&#x201D;}&#x5728;&#x5F53;&#x524D;&#x7528;&#x6237;&#x7F16;&#x8F91;&#x6587;&#x6863;&#x4EE5;&#x53CA;&#x4E0E;&#x53C2;&#x6570;&#xFF1A;{&#x201C;&#x6570;&#x636E;&#x201D;&#xFF1A;&#x5047;}&#x5728;&#x5F53;&#x524D;&#x7528;&#x6237;&#x7684;&#x66F4;&#x6539;&#x53D1;&#x9001;&#x5230;&#x6587;&#x6863;&#x7F16;&#x8F91;&#x670D;&#x52A1;&#x3002;
                        // onDownloadAs,//-&#x8C03;&#x7528;downloadAs&#x65B9;&#x6CD5;&#x65F6;&#xFF0C;&#x4F7F;&#x7528;&#x6307;&#x5411;&#x5DF2;&#x7F16;&#x8F91;&#x6587;&#x4EF6;&#x7684;&#x7EDD;&#x5BF9;URL&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x5728;data&#x53C2;&#x6570;&#x4E2D;&#x53D1;&#x9001;&#x8981;&#x4E0B;&#x8F7D;&#x7684;&#x6587;&#x6863;&#x7684;&#x7EDD;&#x5BF9;URL &#x3002;
                        // onError,//-&#x53D1;&#x751F;&#x9519;&#x8BEF;&#x6216;&#x5176;&#x4ED6;&#x7279;&#x5B9A;&#x4E8B;&#x4EF6;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x9519;&#x8BEF;&#x6D88;&#x606F;&#x5728;data&#x53C2;&#x6570;&#x4E2D;&#x53D1;&#x9001;&#x3002;
                        // onInfo,//-&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x6253;&#x5F00;&#x6587;&#x4EF6;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x8BE5;&#x6A21;&#x5F0F;&#x5728;data.mode&#x53C2;&#x6570;&#x4E2D;&#x53D1;&#x9001;&#x3002;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x6216;&#x7F16;&#x8F91;&#x3002;
                        // onMetaChange,//-&#x901A;&#x8FC7;meta&#x547D;&#x4EE4;&#x66F4;&#x6539;&#x6587;&#x6863;&#x7684;&#x5143;&#x4FE1;&#x606F;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x6587;&#x6863;&#x540D;&#x79F0;&#x901A;&#x8FC7;data.title&#x53C2;&#x6570;&#x53D1;&#x9001;&#x3002;
                        // onOutdatedVersion,//-&#x4F7F;&#x7528;&#x65E7;&#x7684;document.key&#x503C;&#x6253;&#x5F00;&#x6587;&#x6863;&#x8FDB;&#x884C;&#x7F16;&#x8F91;&#x65F6;&#xFF0C;&#x663E;&#x793A;&#x9519;&#x8BEF;&#x540E;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#xFF0C;&#x8BE5;&#x503C;&#x7528;&#x4E8E;&#x7F16;&#x8F91;&#x5148;&#x524D;&#x7684;&#x6587;&#x6863;&#x7248;&#x672C;&#x5E76;&#x5DF2;&#x6210;&#x529F;&#x4FDD;&#x5B58;&#x3002;&#x8C03;&#x7528;&#x6B64;&#x4E8B;&#x4EF6;&#x65F6;&#xFF0C;&#x5FC5;&#x987B;&#x4F7F;&#x7528;&#x65B0;&#x7684;document.key&#x91CD;&#x65B0;&#x521D;&#x59CB;&#x5316;&#x7F16;&#x8F91;&#x5668;&#x3002;
                        // onReady,//-&#x5C06;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x52A0;&#x8F7D;&#x5230;&#x6D4F;&#x89C8;&#x5668;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x81EA;&#x4ECE;5.0&#x7248;&#x672C;&#x4E0D;&#x63A8;&#x8350;&#x4F7F;&#x7528;&#xFF0C;&#x8BF7;&#x4F7F;&#x7528;onAppReady&#x4EE3;&#x66FF;
                        // onRequestClose,//-&#x7ED3;&#x675F;&#x7F16;&#x8F91;&#x5668;&#x7684;&#x5DE5;&#x4F5C;&#x5E76;&#x4E14;&#x5FC5;&#x987B;&#x5173;&#x95ED;&#x7F16;&#x8F91;&#x5668;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;
                        // onRequestCompareFile,//-&#x7528;&#x6237;&#x5C1D;&#x8BD5;&#x901A;&#x8FC7;&#x5355;&#x51FB;&#x201C;&#x5B58;&#x50A8;&#x4E2D;&#x7684;&#x6587;&#x6863;&#x201D;&#x6309;&#x94AE;&#x6765;&#x9009;&#x62E9;&#x8981;&#x6BD4;&#x8F83;&#x7684;&#x6587;&#x6863;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x8981;&#x9009;&#x62E9;&#x8981;&#x6BD4;&#x8F83;&#x7684;&#x6587;&#x6863;&#xFF0C;&#x5FC5;&#x987B;&#x8C03;&#x7528;setRevisedFile&#x65B9;&#x6CD5;&#x3002;&#x5982;&#x679C;&#x672A;&#x58F0;&#x660E;&#x8BE5;&#x65B9;&#x6CD5;&#xFF0C;&#x5219;&#x4E0D;&#x4F1A;&#x663E;&#x793A;&#x201C;&#x6765;&#x81EA;&#x5B58;&#x50A8;&#x7684;&#x6587;&#x6863;&#x201D;&#x6309;&#x94AE;&#x3002;
                        // onRequestCreateNew,//-&#x7528;&#x6237;&#x5C1D;&#x8BD5;&#x901A;&#x8FC7;&#x5355;&#x51FB;&#x201C;&#x65B0;&#x5EFA;&#x201D;&#x6309;&#x94AE;&#x6765;&#x521B;&#x5EFA;&#x6587;&#x6863;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x4F7F;&#x7528;&#x6B64;&#x65B9;&#x6CD5;&#x4EE3;&#x66FF;createUrl&#x5B57;&#x6BB5;&#x3002;&#x5982;&#x679C;&#x672A;&#x58F0;&#x660E;&#x8BE5;&#x65B9;&#x6CD5;&#x4E14;&#x672A;&#x6307;&#x5B9A;createUrl&#xFF0C;&#x5219;&#x5C06;&#x4E0D;&#x4F1A;&#x663E;&#x793A;&#x201C;&#x521B;&#x5EFA;&#x65B0;&#x201D;&#x6309;&#x94AE;&#x3002;
                        // onRequestEditRights,//-&#x7528;&#x6237;&#x5C1D;&#x8BD5;&#x901A;&#x8FC7;&#x5355;&#x51FB;&#x201C;&#x7F16;&#x8F91;&#x6587;&#x6863;&#x201D;&#x6309;&#x94AE;&#x5C1D;&#x8BD5;&#x5C06;&#x6587;&#x6863;&#x4ECE;&#x89C6;&#x56FE;&#x5207;&#x6362;&#x5230;&#x7F16;&#x8F91;&#x6A21;&#x5F0F;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x8C03;&#x7528;&#x8BE5;&#x51FD;&#x6570;&#x65F6;&#xFF0C;&#x5FC5;&#x987B;&#x5728;&#x7F16;&#x8F91;&#x6A21;&#x5F0F;&#x4E0B;&#x518D;&#x6B21;&#x521D;&#x59CB;&#x5316;&#x7F16;&#x8F91;&#x5668;&#x3002;&#x5982;&#x679C;&#x672A;&#x58F0;&#x660E;&#x8BE5;&#x65B9;&#x6CD5;&#xFF0C;&#x5219;&#x4E0D;&#x4F1A;&#x663E;&#x793A;&#x201C;&#x7F16;&#x8F91;&#x201D;&#x6309;&#x94AE;&#x3002;
                        // onRequestHistory,//-&#x7528;&#x6237;&#x5C1D;&#x8BD5;&#x901A;&#x8FC7;&#x5355;&#x51FB;&#x201C;&#x7248;&#x672C;&#x5386;&#x53F2;&#x8BB0;&#x5F55;&#x201D;&#x6309;&#x94AE;&#x663E;&#x793A;&#x6587;&#x6863;&#x7248;&#x672C;&#x5386;&#x53F2;&#x8BB0;&#x5F55;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x8981;&#x663E;&#x793A;&#x6587;&#x6863;&#x7248;&#x672C;&#x5386;&#x53F2;&#xFF0C;&#x60A8;&#x5FC5;&#x987B;&#x8C03;&#x7528;refreshHistory&#x65B9;&#x6CD5;&#x3002;&#x5982;&#x679C;&#x672A;&#x58F0;&#x660E;&#x8BE5;&#x65B9;&#x6CD5;&#x548C;onRequestHistoryData&#x65B9;&#x6CD5;&#xFF0C;&#x5219;&#x4E0D;&#x4F1A;&#x663E;&#x793A;&#x201C;&#x7248;&#x672C;&#x5386;&#x53F2;&#x8BB0;&#x5F55;&#x201D;&#x6309;&#x94AE;&#x3002;
                        // onRequestHistoryClose,//-&#x5F53;&#x7528;&#x6237;&#x5C1D;&#x8BD5;&#x901A;&#x8FC7;&#x5355;&#x51FB;&#x201C;&#x5173;&#x95ED;&#x5386;&#x53F2;&#x8BB0;&#x5F55;&#x201D;&#x6309;&#x94AE;&#x6765;&#x67E5;&#x770B;&#x6587;&#x6863;&#x7248;&#x672C;&#x5386;&#x53F2;&#x8BB0;&#x5F55;&#x65F6;&#xFF0C;&#x8BD5;&#x56FE;&#x8C03;&#x7528;&#x8BE5;&#x6587;&#x6863;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x8C03;&#x7528;&#x8BE5;&#x51FD;&#x6570;&#x65F6;&#xFF0C;&#x5FC5;&#x987B;&#x5728;&#x7F16;&#x8F91;&#x6A21;&#x5F0F;&#x4E0B;&#x518D;&#x6B21;&#x521D;&#x59CB;&#x5316;&#x7F16;&#x8F91;&#x5668;&#x3002;&#x5982;&#x679C;&#x672A;&#x58F0;&#x660E;&#x8BE5;&#x65B9;&#x6CD5;&#xFF0C;&#x5219;&#x4E0D;&#x4F1A;&#x663E;&#x793A;&#x201C;&#x5173;&#x95ED;&#x5386;&#x53F2;&#x8BB0;&#x5F55;&#x201D;&#x6309;&#x94AE;&#x3002;
                        // onRequestHistoryData,//-&#x7528;&#x6237;&#x5C1D;&#x8BD5;&#x5355;&#x51FB;&#x6587;&#x6863;&#x7248;&#x672C;&#x5386;&#x53F2;&#x8BB0;&#x5F55;&#x4E2D;&#x7684;&#x7279;&#x5B9A;&#x6587;&#x6863;&#x7248;&#x672C;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;
                        // onRequestInsertImage,//-&#x7528;&#x6237;&#x5C1D;&#x8BD5;&#x901A;&#x8FC7;&#x5355;&#x51FB;&#x201C;&#x4FDD;&#x5B58;&#x56FE;&#x50CF;&#x201D;&#x6309;&#x94AE;&#x63D2;&#x5165;&#x56FE;&#x50CF;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x56FE;&#x50CF;&#x63D2;&#x5165;&#x7684;&#x7C7B;&#x578B;&#x5728;&#x53C2;&#x6570;data.c&#x4E2D;&#x6307;&#x5B9A;&#x3002;
                        // onRequestRename,//-&#x7528;&#x6237;&#x5C1D;&#x8BD5;&#x901A;&#x8FC7;&#x5355;&#x51FB;&#x201C;&#x91CD;&#x547D;&#x540D;...&#x201D;&#x6309;&#x94AE;&#x91CD;&#x547D;&#x540D;&#x6587;&#x4EF6;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;
                        // onRequestRestore,//-&#x7528;&#x6237;&#x5355;&#x51FB;&#x7248;&#x672C;&#x5386;&#x53F2;&#x8BB0;&#x5F55;&#x4E2D;&#x7684;&#x201C;&#x8FD8;&#x539F;&#x201D;&#x6309;&#x94AE;&#x6765;&#x8FD8;&#x539F;&#x6587;&#x4EF6;&#x7248;&#x672C;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;
                        // onRequestSaveAs,//-&#x7528;&#x6237;&#x5C1D;&#x8BD5;&#x901A;&#x8FC7;&#x5355;&#x51FB;&#x201C;&#x53E6;&#x5B58;&#x4E3A;...&#x201D;&#x6309;&#x94AE;&#x4FDD;&#x5B58;&#x6587;&#x4EF6;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x6587;&#x6863;&#x7684;&#x6807;&#x9898;&#x548C;&#x8981;&#x4E0B;&#x8F7D;&#x7684;&#x6587;&#x6863;&#x7684;&#x7EDD;&#x5BF9;URL&#x5728;data&#x53C2;&#x6570;&#x4E2D;&#x53D1;&#x9001;&#x3002;&#x5982;&#x679C;&#x672A;&#x58F0;&#x660E;&#x8BE5;&#x65B9;&#x6CD5;&#xFF0C;&#x5219;&#x4E0D;&#x4F1A;&#x663E;&#x793A;&#x201C;&#x53E6;&#x5B58;&#x4E3A;...&#x201D;&#x6309;&#x94AE;&#x3002;
                        // onRequestSharingSettings,//-&#x7528;&#x6237;&#x5355;&#x51FB;&#x201C;&#x66F4;&#x6539;&#x8BBF;&#x95EE;&#x6743;&#x9650;&#x201D;&#x6309;&#x94AE;&#x6765;&#x7BA1;&#x7406;&#x6587;&#x6863;&#x8BBF;&#x95EE;&#x6743;&#x9650;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x5FC5;&#x987B;&#x8C03;&#x7528;setSharingSettings&#x65B9;&#x6CD5;&#x6765;&#x66F4;&#x65B0;&#x6709;&#x5173;&#x5141;&#x8BB8;&#x4E0E;&#x5176;&#x4ED6;&#x7528;&#x6237;&#x5171;&#x4EAB;&#x6587;&#x6863;&#x7684;&#x8BBE;&#x7F6E;&#x7684;&#x4FE1;&#x606F;&#x3002;&#x5982;&#x679C;&#x672A;&#x58F0;&#x660E;&#x8BE5;&#x65B9;&#x6CD5;&#xFF0C;&#x5219;&#x4E0D;&#x4F1A;&#x663E;&#x793A;&#x201C;&#x66F4;&#x6539;&#x8BBF;&#x95EE;&#x6743;&#x9650;&#x201D;&#x6309;&#x94AE;&#x3002;
                        // onRequestUsers,//-&#x8BC4;&#x8BBA;&#x8005;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x8981;&#x5728;&#x8BC4;&#x8BBA;&#x4E2D;&#x63D0;&#x53CA;&#x7684;&#x5176;&#x4ED6;&#x7528;&#x6237;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x8981;&#x8BBE;&#x7F6E;&#x7528;&#x6237;&#x5217;&#x8868;&#xFF0C;&#x5FC5;&#x987B;&#x8C03;&#x7528;setUsers&#x65B9;&#x6CD5;&#x3002;
                        // onWarning,//-&#x53D1;&#x751F;&#x8B66;&#x544A;&#x65F6;&#x8C03;&#x7528;&#x7684;&#x51FD;&#x6570;&#x3002;&#x8B66;&#x544A;&#x6D88;&#x606F;&#x5728;data&#x53C2;&#x6570;&#x4E2D;&#x53D1;&#x9001;&#x3002;
                        // "onDocumentStateChange": function() {
                        // }, //&#x6587;&#x6863;&#x6539;&#x53D8;&#x540E;&#x7684;&#x56DE;&#x8C03;
                        //"onDocumentReady" : onDocumentReady, //&#x6587;&#x6863;&#x521D;&#x59CB;&#x5316;&#x51C6;&#x5907;&#x597D;&#x540E;&#x7684;&#x56DE;&#x8C03;
                    },
                };
                var docEditor = new DocsAPI.DocEditor("placeholder", config);
            }

数据接口

  • 下载文件

返回数据流即可,示例如下

    @GetMapping("/download")
    @ResponseBody
    public void download(@RequestParam("attguid") String attguid, HttpServletRequest request, HttpServletResponse response) throws Exception {
        AttachmentDO attachment = attachmentService.selectOne(attguid);
        String filePath = "";
        //云上传的附件
        if (attachment.getVirtualpath().contains("ReadAlOSS")) {
            if (attachment.getCanedit() == null || attachment.getCanedit() == 20) {
                String fileurl = aliUtil.readOSSFile(attachment);
                if (!StringUtil.isEmpty(fileurl)) {
                    response.sendRedirect(fileurl);
                }
            } else if (attachment.getCanedit() == 30) {
                String fileurl = huaWeiUtil.readOBSFile(attachment);
                System.out.println(fileurl);
                if (!StringUtil.isEmpty(fileurl)) {
                    response.sendRedirect(fileurl);
                }
            } else if (attachment.getCanedit() == 40) {
                String fileurl = minioUtil.readMinioFile(attachment);
                System.out.println(fileurl);
                if (!StringUtil.isEmpty(fileurl)) {
                    response.sendRedirect(fileurl);
                }
            }
        }
        //本地文件
        String configPath = frameConfig.getAttachPath();
        filePath = configPath + attachment.getVirtualpath();

        File file = new File(filePath);
        if (file.exists()) {
            String filename = attachment.getFilename();
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "utf-8"));
            response.setCharacterEncoding("utf-8");
            response.setContentLength((int) file.length());

            byte[] buff = new byte[(int) file.length()];
            BufferedInputStream bufferedInputStream = null;
            OutputStream outputStream = null;
            try {
                outputStream = response.getOutputStream();
                bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
                int i = 0;
                while ((i = bufferedInputStream.read(buff)) != -1) {
                    outputStream.write(buff, 0, i);
                    outputStream.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {

                try {
                    bufferedInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 保存文件

解析传递的参数,获取文件url下载到本地后,进行自定义业务操作

@PostMapping("/save")
    @ResponseBody
    public void save(@RequestParam Map map, HttpServletRequest request, HttpServletResponse response) {
        PrintWriter writer = null;
        String body = "";
        String attguid = request.getParameter("attguid");
        try {
            writer = response.getWriter();
            Scanner scanner = new Scanner(request.getInputStream());
            scanner.useDelimiter("\\A");
            body = scanner.hasNext() ? scanner.next() : "";
            scanner.close();
        } catch (Exception ex) {
            writer.write("get request.getInputStream error:" + ex.getMessage());
            return;
        }

        if (body.isEmpty()) {
            throw new CustomerRuntimeException("ONLYOFFICE回调保存请求体未空");
        }

        JSONObject jsonObj = JSONObject.parseObject(body);
        int status = (Integer) jsonObj.get("status");
        int saved = 0;
        String key = jsonObj.get("key").toString();
        if (status == 2 || status == 3 || status == 6) //MustSave, Corrupted
        {
            String downloadUri = (String) jsonObj.get("url");
            System.out.println(downloadUri);
            try {
                String filePath = "tempfiles/onlyoffice/savedownload/";
                FileUtil.initfloderPath(filePath);
                String fileName = CommonUtil.getNewGuid();
                HttpUtil.downLoadFromUrl(downloadUri, filePath, fileName);
                attachLogic.updateAttachContent(attguid, FileUtil.getBytes(filePath + fileName));
            } catch (Exception ex) {
                saved = 1;
                ex.printStackTrace();
            }
        }
        writer.write("{\"error\":" + saved + "}");
    }

外部按钮接入

以保存按钮为例

获取编辑器iframe按钮中的slot-btn-dt-save节点元素,定位div下的button按钮,进行js模拟点击实现保存操作

通过监听iframe的message来捕获到保存结束页面弹出自定义提示

上述操作因编辑器html页面和onlyoffice服务存在跨域问题,需要配置nginx代理到统一ip端口下

  function HandleSave() {
        var frameDocument = document.getElementsByTagName("iframe")[0].contentDocument;
        frameDocument.getElementById("slot-btn-dt-save").getElementsByTagName("button")[0].click();
    }

    window.onmessage = function (event) {
        var data = JSON.parse(event.data);
        if (data.event == "onDocumentStateChange" && data.data == false) {
            OpenSuccessMessage("保存成功")
        }
    }

Original: https://www.cnblogs.com/yanpeng19940119/p/16727588.html
Author: code2roc
Title: SpringBoot集成onlyoffice实现word文档编辑保存

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/616462/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • java 异常类与自定义异常

    目录 异常类 Exception 类的层次 throws/throw 关键字: throws: throw: try catch finally语句 声明自定义异常 异常类 在 J…

    Java 2023年6月9日
    094
  • 面试官:你说你精通Redis,你看过持久化的配置吗?

    前边我们已经介绍了 Redis 五种数据类型的命令与 配置文件的基本配置,今天让我们从理论和配置两个层面来揭开 Redis持久化的神秘面纱。 所谓持久化可以简单理解为将内存中的数据…

    Java 2023年6月5日
    065
  • 下单流程解耦新方案-你知道Spring事件监听机制吗

    一、Spring事件监听介绍 Spring对事件监听是通过事件类型、事件类型监听和事件发布器3个部分来完成的 // 1. 自定义订单事件 public class OrderEve…

    Java 2023年6月14日
    068
  • Android-Java-普通类与抽象类(覆盖)&方法重载

    执行结果: 覆盖,复写,重写的规则: 返回值 方法名 参数类型与数量 必须一致,并且,子类的修饰权限要大于等于父类(父类public 子类public 👌,父类protected …

    Java 2023年5月29日
    091
  • Java: native

    解释 native主要用于 方法上 1、一个native方法就是一个Java调用非Java代码的接口。一个native方法是指该方法的实现由非Java语言实现,比如用C或C++实现…

    Java 2023年6月7日
    073
  • 基于Dom4j实现javaBean转xml的功能

    一、前言前面实现了xml转javaBean的功能,今天继续完成javaBean转xml的功能。这一块实现的比较早现在看来可能有很多可以优化的地方(也说明了我有成长) 三、功能实现 …

    Java 2023年6月14日
    085
  • Apache DolphinScheduler新一代分布式工作流任务调度平台实战-上

    概述 定义 特性 名词 模块组成 部署 建议配置 下载 部署规划 前置准备工作 准备启动环境 修改配置文件 初始化数据库 启动 DolphinScheduler 实战使用 监控中心…

    Java 2023年6月5日
    071
  • Dos基本命令

    打开CMD的方式 开始 >> Windows系统 >> 命令提示符 Win键+R键 >> 输入cmd打开控制台(推荐使用) 在任意文件夹下面,按…

    Java 2023年6月6日
    086
  • SSH远程登录

    1、首先我们得清楚,客户端、服务端两端都是通信端。都有【公钥、私钥】 2、公钥 public key,就是大家都是可以获得的,但是有一个特点就是:该公钥加密的内容,只有我的私钥能解…

    Java 2023年6月7日
    056
  • CentOS7.4下使用Nginx配置Asp.net Core和添加Https证书步骤

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/zxtceq/p/14173558.htmlAuthor…

    Java 2023年5月30日
    065
  • Java基础语法(二)

    Java基础语法(二) 合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。 ——《道德经》 Java基础语法(二) – 十、用户交互 Scanner 类(引用…

    Java 2023年6月9日
    060
  • 包管理原则

    坊间传闻java web开发人员写了那么多代码,但是其实一半代码都在处理NPE。总是在加班,却大部分时间都在处理包冲突,类加载不了的bug。这些问题总是让新老程序员都很抓狂,有很多…

    Java 2023年6月8日
    090
  • java 8 新特性

    java8 是一个有里程碑的一个版本,提供了很多的新特性,但这些新特性是实打实有用的,而不是一些鸡肋 接口新特性 java8 之前,往接口里新加一个方法,那么所有的实现类都需要变动…

    Java 2023年6月8日
    074
  • docker 命令记录

    1、docker 安装 docker pull 名称:版本号 示例:docker pull mysql:5.7 2、docker 镜像查看 docker images:查看 doc…

    Java 2023年6月5日
    055
  • day04-MySQL常用函数

    5.MySQL常用函数 5.1合计/统计函数 5.1.1合计函数-count count 返回行的总数 Select count(*)|count (列名) from table_…

    Java 2023年6月15日
    081
  • 初来乍到,请多指教

    刚开通了博客园,会同步发一些csdn上的内容。 博客园的第一感觉就是,很朴实,很复古,有种非移动互联网时代的风格。 其次,编辑文章时,发现对导入的Markdown文档支持的很好,无…

    Java 2023年6月5日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球