onlyoffice9.4 二次开发指南 基础环境搭建+部署+demo可直接运行【在线试用】 最简单的入门
office这个体系分为四个大教程1、【document server文档服务器基础搭建】2、【连接器(connector)或者jsApi调用操作office】-进阶3、【document builder文档构造器使用】-进阶4、【Conversion API(文档转化服务)】-进阶如果需要连接器可以查看曹瑞onlyoffice高级二开版本http://www.caoruisoft.com/#/onlyoffice_doc/mainonlyoffice 连接器开发(connector) api操作文档 基础教程【在线试用 9.3.0 】-CSDN博客https://blog.csdn.net/lz610756247/article/details/1361893951、onlyoffice软件本身的部署这里主要介绍docker版本因为在学习过程中发现onlyoffice本身很大最好还是独立部署一台服务器避免和其他资源冲突所以结合当前的技术路线docker是比较好的选择。2、拉取docker镜像并启动2.1、首先我们拉取docker镜像推荐先用9.3.0进行测试图例用的是windows下的docker desktoplinux下同理可以使用docker的web界面管理工具进行操作比如macrozheng吊炸天的 Docker 图形化工具 Portainer必须推荐给你图1、拉取镜像2.2、等着镜像拉取完成我们来启动它点击右边的启动按钮图2、准备启动2.3、之后会打开一个配置框这里就看个人了我习惯映射一个端口。图3、启动配置2.4、接下来等着启动完成就可以了日志大概是这样的图4、启动日志图例关闭jwt -e JWT_ENABLEDfalse 比如docker run --nameoo -i -t -d -p 10100:80 --restartalways -e JWT_ENABLEDfalse onlyoffice/documentserver:8.1.3 报错私有IP不允许下载文件解决办法 容器第一次启动后编辑docker中/etc/onlyoffice/documentserver/default.json下的内容 搜索并修改以下字段为true request-filtering-agent : { allowPrivateIPAddress: true, allowMetaIPAddress: true }, 保存default.json后重启重启再尝试 原因only从7.5之后默认需要打开JWT如果关闭不允许下载IP段文件这时候需要关闭相应的安全认证。------------------------------------以上为office软件本身的部署-------------------------------3、集成html或者vue3.1、这里使用html原生最为直观vue也一样只是封装了几个方法。3.2、onlyoffice编辑器需要如下几个必须配置才可以正常使用1、config配置 config的完整文档https://api.onlyoffice.com/editors/config/ 我们下面使用【必要参数】的简化做讲解 2、callback回调 回调的最要说明statushttps://api.onlyoffice.com/editors/callback 回调是后端的实现只有一个目的接受office保存文件通知然后你就可以拿到前端保存文件进行操作 比如上传minio、保存到本地等等3.3、config样例这个样例可以直接使用不用调整所有的参数在这里ONLYOFFICE API 文档 - 高级参数var config { documentType: word, document: { title: 【经营】通用合同模板.docx, url: https://d2nlctn12v279m.cloudfront.net/assets/docs/samples/zh/demo.docx, // 当前用户对于当前文档的操作权限 permissions: { print: false, download: true }, fileType: docx, onlyoffice用key做文件缓存索引推荐每次都随机生成一下不然总是读取缓存 key: e932e7bb1e4d449aa9a7d8ss517 }, editorConfig: { // 编辑器常规配置 customization: { // 自动保存可以关闭常规ctrls更好用 autosave: false, compactToolbar: true, forcesave: true, toolbarNoTabs: true, help: false, compactHeader: true, hideRightMenu: true, }, mode: edit, 这个回调及其的重要 callbackUrl: , // 菜单显示语言 lang: zh-CN, // 当前操作用户信息 user: { name: 曹瑞剑雄, id: 103 } } };【url】一定使用真实的IP或者域名不要使用127.0.0.1或者localhost因为office容器/服务器不是你的localhost它需要读取你电脑上的文件只能有真实IP/域名。【callbackUrl】开放所有方法不要指定只能用get或者post。前期调试的时候直接返回{error:0}就可以等调通后再考虑逻辑处理。3.4、后端样例包含status说明和接收信息流实现public enum OnlyOfficeCallBackStatus { SUCCESS(0, 通用), EDIT(1, 正在编辑文档), READY_TO_SAVE(2, 文档已准备好保存), SAVE_ERROR(3, 发生文档保存错误), CLOSE_NO_CHANGE(4, 文档已关闭没有任何更改), SAVE(6, 保存), FORCE_SAVE_ERROR(7, 强制保存文档时发生错误), ; private final Integer code; private final String message; OnlyOfficeCallBackStatus(Integer code, String message) { this.code code; this.message message; } public boolean equals(Integer code) { return this.code.equals(code); } }service实现仅供参考用什么语言都行。/** * 回调 */ Override public String callback(HttpServletRequest request, HttpServletResponse response) throws IOException { log.info(传入的参数 request.getParameterMap()); String body ; try { Scanner scanner new Scanner(request.getInputStream()); scanner.useDelimiter(\\A); body scanner.hasNext() ? scanner.next() : ; scanner.close(); } catch (Exception ex) { return ; } if (body.isEmpty()) { throw new IOException(ONLYOFFICE回调保存请求体未空); } JSONObject jsonObj JSONUtil.parseObj(body); log.info(body数据 jsonObj); int status jsonObj.getInt(status); if (status 2 || status 3 || status 6){ String serverFielUrl jsonObj.getStr(url); HttpResponse res HttpRequest.get(serverFielUrl).execute(); InputStream in res.bodyStream(); // 模板路径 String fileName cn.hutool.core.lang.UUID.randomUUID().toString().replace(-, ) _create. jsonObj.getStr(filetype); String templatePath getClass().getClassLoader().getResource().getPath(); templatePath fileName; log.info(文件保存地址 templatePath); File tempFile new File(templatePath); try { FileUtils.copyInputStreamToFile(in, tempFile); } catch (IOException e) { e.printStackTrace(); } } return {\error\:0}; }4、前端的demo可以直接运行我这边搭建了体验服务器版本为9.3.0!DOCTYPE html html head meta charsetutf-8 title/title script typetext/javascript srchttp://47.94.91.67:10100/web-apps/apps/api/documents/api.js/script style body { width: 100%; height: 90vh; display: flex; flex-direction: column; } #placeholder { width: 100%; height: 100vh; } /style /head body div idplaceholder classnav stylewidth: 100%; height: 100vh;/div /body script var onDocumentReady function () { console.log(文档准备好了); }; var config { documentType: word, historyList: { history: [], currentVersion: 1 }, document: { title: 【经营】通用合同模板.docx, url: https://d2nlctn12v279m.cloudfront.net/assets/docs/samples/zh/demo.docx, permissions: { print: false, download: true }, attachId: e932e7bb1e4d449aa9a7d8b403b4b517, fileType: docx, key: e932e7bb1e4d449aa9a7d8ss517 }, editorConfig: { customization: { autosave: false, compactToolbar: true, forcesave: true, toolbarNoTabs: true, help: false, compactHeader: true, hideRightMenu: true, }, mode: edit, callbackUrl: , lang: zh-CN, user: { name: 曹瑞剑雄, id: 103 } } }; var docEditor; initDocEditor(); /** * 初始化编辑器 */ function initDocEditor() { // 初始化配置 config[events] { onDocumentReady: onDocumentReady }; docEditor new DocsAPI.DocEditor(placeholder, config); } /script /html整个代码的核心就是docEditor newDocsAPI.DocEditor(placeholder, config);这句话 包含两个参数 第一个参数是需要使用的渲染容器ID比如div 第二个就是初始化编辑器所需要的配置信息----------------------------------以上是先跑起来的步骤------------------------------------5、onlyoffice基础原理讲解5.1、office本身有DOCUMENT SERVER文档服务器、DOCUMENT BUILDER文档生成器、 Conversion API转化API对于绝大部分公司的业务目前只用到DOCUMENT SERVER文档服务器就可以了其他的进阶教程【后续补充】1、DOCUMENT SERVER文档服务器 用于web页面编辑office文件也就是最最基础的功能。上面的实例就是DOCUMENT SERVER文档服务器 2、DOCUMENT BUILDER文档生成器 用于通过代码生成或者操作office文件比如后端常用的poi等框架onlyoffice本身也提供了这个功能【进阶】 3、Conversion API转化API 部分公司业务上会需要对文件进行转化onlyoffice也提供了这样的功能比如word-html、word-pdf等等【进阶】5.2、DOCUMENT SERVER文档服务器前后端如何进行交互这里借用一个图交互流程简单来说就是前端操作-onlyoffice-你的后端callback 如果你有做过微信之类的回调就会比较清晰office服务器作为中介用于处理前端与后端的连通。 除此之外再无其他。6、结语如果你看到了这里发现想调用前端API操作word等等那么你需要看进阶教程了。比如jsAPi操作office文档官方叫做connector(链接器)替代poi、easyExcel、phpExcel等后端操作office文档等有word、excel、pdf、html等相互转化需求的7、进阶教程正在编写包含上面所关心的内容2、【连接器(connector)或者jsApi调用操作office】-进阶3、【document builder文档构造器使用】-进阶4、【Conversion API(文档转化服务)】-进阶8、作者介绍