• onlyoffice基础环境搭建+部署+demo可直接运行 最简单的入门


    office这个体系分为四个大教程

            1、【document server文档服务器基础搭建】

            2、【连接器(connector)或者jsApi调用操作office】-进阶

            3、【document builder文档构造器使用】-进阶

            4、【Conversion API(文档转化服务)】-进阶

             如果需要连接器,可以查看【镜像需要付费购买嘿嘿】:onlyofficeV7.5.1 jsApi调用 进阶开发 二次开发 连接器(connector)开发 - 知乎 (zhihu.com)

    1、onlyoffice软件本身的部署

            这里主要介绍docker版本,因为在学习过程中发现,onlyoffice本身很大,最好还是独立部署一台服务器,避免和其他资源冲突,所以结合当前的技术路线,docker是比较好的选择。

    2、拉取docker镜像,并启动

            2.1、首先我们拉取docker镜像,推荐先用7.3.3进行测试,从7.5之后启动需要带有token标识,太麻烦,图例用的是windows下的docker desktop,linux下同理,可以使用docker的web界面管理工具进行操作比如:macrozheng:吊炸天的 Docker 图形化工具 Portainer,必须推荐给你!

    图1、拉取镜像

            2.2、等着镜像拉取完成,我们来启动它,点击右边的启动按钮

    图2、准备启动

            2.3、之后会打开一个配置框,这里就看个人了,我习惯映射一个端口。

    图3、启动配置

            2.4、接下来等着启动完成就可以了,日志大概是这样的

    图4、启动日志图例

    ------------------------------------以上为office软件本身的部署-------------------------------

    3、集成html或者vue

            3.1、这里使用html原生最为直观,vue也一样,只是封装了几个方法。

            3.2、onlyoffice编辑器需要如下几个必须配置才可以正常使用

    1. 1、config配置
    2. config的完整文档:https://api.onlyoffice.com/editors/config/
    3. 我们下面使用【必要参数】的简化做讲解
    4. 2、callback回调
    5. 回调的最要说明,status:https://api.onlyoffice.com/editors/callback
    6. 回调是后端的实现,只有一个目的,接受office保存文件通知,然后你就可以拿到前端保存文件进行操作
    7. 比如:上传minio、保存到本地等等

            3.3、config样例,这个样例可以直接使用不用调整,所有的参数在这里:ONLYOFFICE API 文档 - 高级参数

    1. var config = {
    2. "documentType": "word",
    3. "document": {
    4. "title": "【经营】通用合同模板.docx",
    5. "url": "https://d2nlctn12v279m.cloudfront.net/assets/docs/samples/zh/demo.docx",
    6. // 当前用户对于当前文档的操作权限
    7. "permissions": {
    8. "print": false,
    9. "download": true
    10. },
    11. "fileType": "docx",
    12. onlyoffice用key做文件缓存索引,推荐每次都随机生成一下,不然总是读取缓存
    13. "key": "e932e7bb1e4d449aa9a7d8ss517"
    14. },
    15. "editorConfig": {
    16. // 编辑器常规配置
    17. "customization": {
    18. // 自动保存可以关闭,常规ctrl+s更好用
    19. "autosave": false,
    20. "compactToolbar": true,
    21. "forcesave": true,
    22. "toolbarNoTabs": true,
    23. "help": false,
    24. "compactHeader": true,
    25. "hideRightMenu": true,
    26. },
    27. "mode": "edit",
    28. 这个回调及其的重要
    29. "callbackUrl": "https://www.onlyoffice.com/post.ashx?type=editor-callback",
    30. // 菜单显示语言
    31. "lang": "zh-CN",
    32. // 当前操作用户信息
    33. "user": {
    34. "name": "曹瑞剑雄",
    35. "id": "103"
    36. }
    37. }
    38. };

            【url】一定使用真实的IP或者域名,不要使用127.0.0.1或者localhost

            因为office容器/服务器,不是你的localhost,它需要读取你电脑上的文件,只能有真实IP/域名。

            【callbackUrl】,开放所有方法,不要指定只能用get或者post。

            前期调试的时候,直接返回{"error":0}就可以,等调通后再考虑逻辑处理。

            3.4、后端样例,包含:status说明和接收信息流实现

    1. public enum OnlyOfficeCallBackStatus {
    2. SUCCESS(0, "通用"),
    3. EDIT(1, "正在编辑文档"),
    4. READY_TO_SAVE(2, "文档已准备好保存"),
    5. SAVE_ERROR(3, "发生文档保存错误"),
    6. CLOSE_NO_CHANGE(4, "文档已关闭,没有任何更改"),
    7. SAVE(6, "保存"),
    8. FORCE_SAVE_ERROR(7, "强制保存文档时发生错误"),
    9. ;
    10. private final Integer code;
    11. private final String message;
    12. OnlyOfficeCallBackStatus(Integer code, String message) {
    13. this.code = code;
    14. this.message = message;
    15. }
    16. public boolean equals(Integer code) {
    17. return this.code.equals(code);
    18. }
    19. }

    service实现,仅供参考,用什么语言都行。

    1. /**
    2. * 回调
    3. */
    4. @Override
    5. public String callback(HttpServletRequest request, HttpServletResponse response) throws IOException {
    6. log.info("传入的参数:" + request.getParameterMap());
    7. String body = "";
    8. try {
    9. Scanner scanner = new Scanner(request.getInputStream());
    10. scanner.useDelimiter("\\A");
    11. body = scanner.hasNext() ? scanner.next() : "";
    12. scanner.close();
    13. } catch (Exception ex) {
    14. return "";
    15. }
    16. if (body.isEmpty()) {
    17. throw new IOException("ONLYOFFICE回调保存请求体未空");
    18. }
    19. JSONObject jsonObj = JSONUtil.parseObj(body);
    20. log.info("body数据:" + jsonObj);
    21. int status = jsonObj.getInt("status");
    22. if (status == 2 || status == 3 || status == 6){
    23. String serverFielUrl = jsonObj.getStr("url");
    24. HttpResponse res = HttpRequest.get(serverFielUrl).execute();
    25. InputStream in = res.bodyStream();
    26. // 模板路径
    27. String fileName = cn.hutool.core.lang.UUID.randomUUID().toString().replace("-", "") + "_create." + jsonObj.getStr("filetype");
    28. String templatePath = getClass().getClassLoader().getResource("").getPath();
    29. templatePath += fileName;
    30. log.info("文件保存地址:" + templatePath);
    31. File tempFile = new File(templatePath);
    32. try {
    33. FileUtils.copyInputStreamToFile(in, tempFile);
    34. } catch (IOException e) {
    35. e.printStackTrace();
    36. }
    37. }
    38. return "{\"error\":0}";
    39. }

    4、前端的demo,可以直接运行,我这边搭建了体验服务器版本为:7.5.1

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. <script type="text/javascript" src="http://47.94.91.67:10100/web-apps/apps/api/documents/api.js">script>
    7. <style>
    8. body {
    9. width: 100%;
    10. height: 90vh;
    11. display: flex;
    12. flex-direction: column;
    13. }
    14. #placeholder {
    15. width: 100%;
    16. height: 100vh;
    17. }
    18. style>
    19. head>
    20. <body>
    21. <div id="placeholder" class="nav" style="width: 100%; height: 100vh;">div>
    22. body>
    23. <script>
    24. var onDocumentReady = function () {
    25. console.log("文档准备好了");
    26. };
    27. var config = {
    28. "documentType": "word",
    29. "historyList": {
    30. "history": [],
    31. "currentVersion": "1"
    32. },
    33. "document": {
    34. "title": "【经营】通用合同模板.docx",
    35. "url": "https://d2nlctn12v279m.cloudfront.net/assets/docs/samples/zh/demo.docx",
    36. "permissions": {
    37. "print": false,
    38. "download": true
    39. },
    40. "attachId": "e932e7bb1e4d449aa9a7d8b403b4b517",
    41. "fileType": "docx",
    42. "key": "e932e7bb1e4d449aa9a7d8ss517"
    43. },
    44. "editorConfig": {
    45. "customization": {
    46. "autosave": false,
    47. "compactToolbar": true,
    48. "forcesave": true,
    49. "toolbarNoTabs": true,
    50. "help": false,
    51. "compactHeader": true,
    52. "hideRightMenu": true,
    53. },
    54. "mode": "edit",
    55. "callbackUrl": "https://www.onlyoffice.com/post.ashx?type=editor-callback",
    56. "lang": "zh-CN",
    57. "user": {
    58. "name": "曹瑞剑雄",
    59. "id": "103"
    60. }
    61. }
    62. };
    63. var docEditor;
    64. initDocEditor();
    65. /**
    66. * 初始化编辑器
    67. */
    68. function initDocEditor() {
    69. // 初始化配置
    70. config['events'] = {
    71. onDocumentReady: onDocumentReady
    72. };
    73. docEditor = new DocsAPI.DocEditor("placeholder", config);
    74. }
    75. script>
    76. 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(文档转化服务)】-进阶

  • 相关阅读:
    dB,dBm,W,mW,V之间的转换
    基于Java的课程管理系统
    海外推广运营的技巧汇总
    游戏思考19:游戏多维计算相关:点乘、叉乘、点线面距离计算
    NVR(网络硬盘录像机)以及其他相近名词DVR、DVS、NVS
    數據集成平台:datax將hive數據步到mysql(全部列和指定列)
    《动手学深度学习 Pytorch版》 6.2 图像卷积
    mysql用户管理(sql语句)
    # Leetcode刷题day7|454.四数相加II, 383. 赎金信,15. 三数之和 ,18四数之和
    SpringMVC(下)
  • 原文地址:https://blog.csdn.net/lz610756247/article/details/136189156