OnlyOffice 结合 Vue

11 篇文章 0 订阅

1.官网资料

官网中文地址
官网api地址

2.Docker部署OnlyOffice

下载docker, 不会用docker请自行查资料

  1. 拉去镜像
    docker pull onlyoffice/documentserver
    
  2. 启动容器
    # 8085 端口映射 到 容器的 80端口
    # 指定文件代理映射路径
    docker run -i -t -d -p 8085:80 --restart=always 
    	-v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  
    	-v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  
    	-v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice 
    	-v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql  onlyoffice/documentserver
    	
    
  3. 启动容器后, 稍等片刻访问,会成功会出现以下页面.在这里插入图片描述

3. index.html

在vue的项目index.html引入对应服务的js, 服务器ip不要用127.0.0.1 跟 localhost

<script type="text/javascript" src="http://docker服务器ip:docker服务器端口/web-apps/apps/api/documents/api.js"></script>

4.demo.vue

<template>
  <div>
    <div id="placeholder">
    </div>
  </div>
</template>

<script>

  export default {
    name: 'OnlyOffice',
    data() {
      return {
        DocEditor: null,
      }
    },
    mounted() {
      if (this.DocEditor != null) {
        this.DocEditor.destroyEditor();
      }

      let height = document.body.clientHeight - 50 + 'px';
      let config = {
        "document": {
          "fileType": "docx",
          //主键,onlyOffice会做缓存
          "key": "1",
          "title": "我1的测试文档.docx",
          # 文档地址url
          "url": "http://127.0.0.1:9020/1.doc"
        },
        "documentType": "word",
        "height": height,
        "editorConfig": {
          "lang": "zh-CN",
          # 自己后台回调的接口地址  不要使用 127.0.0.1 或 localhost
          "callbackUrl": "http://192.168.1.222:8088/api/onlyOffice/save/"+"123",
          "user": {
            "id": "1",
            "name": "测试人"
          },
          "customization": {
            //开启保存发送状态=6回调
            "forcesave": true,
            "anonymous": {
              //当前操作用户姓名
              "label": "test2022"
            },
          },
        },
        events: {
           "onDocumentStateChange": this.onDocumentStateChange,
           "onRequestSaveAs": this.onRequestSaveAs,
           "onDownloadAs": this.onDownloadAs,
        },
      };
      this.DocEditor = new DocsAPI.DocEditor("placeholder", config);


    },
    methods: {
      //缓存到onlyOffice数据库里面的回调
      onDocumentStateChange(event) {
        if (event.data) {
          console.log("The document changed");
          console.log(event);
          console.log(event.data);
        } else {
          console.log("Changes are collected on document editing service");
        }
      },
      //点击保存按钮的回调
      onRequestSaveAs(event) {
        let fileType = event.data.fileType;
        let title = event.data.title;
        let url = event.data.url;
        console.log(fileType);
        console.log(title);
        console.log(url);
      },
      //下载另存为
      onDownloadAs(event) {
        let fileType = event.data.fileType;
        let url = event.data.url;
        console.log("ONLYOFFICE Document Editor create file: " + url);
      },
    }
  }
</script>

<style lang="scss" scoped>

</style>


5.后端Controller回调函数


/**
 * OnlyOffice-Controller
 */
@RequestMapping("/api/onlyOffice")
@RestController
@Slf4j
public class OnlyOfficeController {

    @PostMapping("/save/{fileId}")
    public ResponseEntity<Map> save(@RequestBody Map param, @PathVariable String fileId) {
        log.info("method[save] fileId:{}", fileId);
        log.info("method[save] param:{}", JsonUtils.toJson(param));
        //文档主键
        Long id = MapUtil.getLong(param, "key");
        log.info("method[save] id:{}", id);
        //操作状态 1:编辑  2:准备保存  3: 保存错误  4:文档关闭没有修改  6: 正在编辑文档,但保存了当前文档状态 7:强制保存文档时发生错误
        Integer status = MapUtil.getInteger(param, "status", -1);
        if (status == 2) {
            //当前在操作用户id
            List<Long> usersId = MapUtil.getValueAsList(param, "users");
            log.info("method[save] usersId:{}", usersId.toString());
        }
        if (status == 6) {
            //TODO 可以利用websocket 推送到页面 产生提示语  
            
            log.info("method[save] 正在编辑文档,但保存了当前文档状态. url:{}", MapUtil.getString(param, "url"));
            Map result = new HashMap(1);
            result.put("error", "0");
            result.put("msg", "操作成功");
            return ResponseEntity.ok(result);
        }
        Map result = new HashMap(1);
        result.put("error", "0");
        return ResponseEntity.ok(result);
    }

}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OnlyOffice提供了一个名为`@onlyoffice/documenteditor`的Vue组件,您可以在Vue项目中使用它来轻松嵌入OnlyOffice文档编辑器。下面是一个简单的示例: 1. 安装OnlyOffice Vue组件: ```bash npm install @onlyoffice/documenteditor --save ``` 2. 在需要使用OnlyOffice编辑器的Vue组件中引入OnlyOffice组件: ```vue <template> <div> <onlyoffice-document-editor :document="document" :options="options" @ready="onReady" @change="onChange" /> </div> </template> <script> import { OnlyofficeDocumentEditor } from '@onlyoffice/documenteditor'; export default { components: { OnlyofficeDocumentEditor, }, data() { return { document: { fileType: 'docx', key: 'your-key', url: 'https://your.onlyoffice.server/your-document.docx', permissions: { edit: true, print: true, }, }, options: { documentType: 'text', editorConfig: { mode: 'edit', }, }, }; }, methods: { onReady() { console.log('OnlyOffice editor is ready'); }, onChange() { console.log('Document content changed'); }, }, }; </script> ``` 在上面的示例中,我们使用了`OnlyofficeDocumentEditor`组件,并将其绑定到`document`和`options`属性上。`document`属性指定了要编辑的文档的信息,`options`属性指定了编辑器的选项。 3. 根据需要使用CSS样式调整OnlyOffice编辑器的外观。 请注意,上面的示例仅用于说明如何在Vue项目中使用OnlyOffice组件,您需要将其调整为适合您的具体应用程序的方式。另外,您需要确保OnlyOffice服务器配置正确,并具有正确的访问权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值