OnlyOffice集成Springboot以及web端

news2024/12/25 9:00:28

上次我们已经搭建好了onlyoffice的服务,不知道如何搭建的伙伴可以看看上篇文章。

以下是springboot和前端web简单集成的页面,亲测jdk8和jdk17都适用。

结构

在这里插入图片描述

前端页面

index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title th:text="${title}"></title>
</head>
<body>

<div id="fileEdit"></div>
<!--// 页面引入document的api.js-->
<script type="text/javascript" src="http://192.168.188.38:8088/web-apps/apps/api/documents/api.js"></script>
<script>
    // 调用js创建预览对象
//     new DocsAPI.DocEditor("fileEdit", // 元素id
//         {
//             "document": {
//                 "permissions": {
//                     "edit": true,
//                 },
//                 "fileType": "docx", // 展示文件的类型
//                 "title": "页面展示的文件名称",
//                 "url":"http://192.168.124.99/static/alllink/111.docx" //读取文件进行展示
//             },
//             "documentType": "text",
//             "editorConfig": {
//                 "lang" : "zh-CN",
// // 回调接口,用于编辑后实现保存的功能,(关闭页面5秒左右会触发)
//                 "callbackUrl": "http://192.168.124.37:8080/docx/save?path=C:\\Users\\hdx\\Desktop\\111.docx" //保存文件的接口?path=告诉保存接口需要覆盖的文件
//             },
//             "height": "1000px",
//             "width": "100%"
//         })

    // new DocsAPI.DocEditor("fileEdit", // 元素id
    //     {
    //         "document": {
    //             "permissions": {
    //                 "edit": true,
    //             },
    //             "fileType": "[[${type}]]", // 展示文件的类型 "xlsx"
    //             "title": "页面展示的文件名称",
    //             // "url":"http://192.168.100.104:9090/test/111.docx" //读取文件进行展示  http://192.168.124.99/static/alllink/file/039adc7b92ce1000/039adc7b92ce1000.xlsx
    //             "url":"http://192.168.100.133:8080/d" //读取文件进行展示  http://192.168.124.99/static/alllink/file/039adc7b92ce1000/039adc7b92ce1000.xlsx
    //         },
    //         // "key":'',
    //         "documentType": "word",//
    //         "editorConfig": {
    //             "lang" : "zh-CN",
    //             // 回调接口,用于编辑后实现保存的功能,(关闭页面5秒左右会触发)
    //             "callbackUrl": "http://192.168.100.133:8080/docx/save?id="+[[${id}]],//保存文件的接口?path=告诉保存接口需要覆盖的文件
    //             "user":{
    //                 "id":"1111",
    //                 "name":"hdx"
    //             }
    //         },
    //         "height": "1000px",
    //         "width": "100%"
    //     })

    new DocsAPI.DocEditor("fileEdit", // 元素id
        {
            type: "desktop",
            width: "100%",
            height: "1000px",
            document: {
                title: "aaaa",
                url: "http://192.168.188.125:8080/d",
                fileType:"docx",
                key: "",
                lang: "zh-CN",
                permissions: {
                    "download": true,
                    "edit": true,
                    "fillForms": true,
                    "print": true,
                }
            },
            editorConfig: {
                "lang": "zh-CN",
                mode: "edit",
                "callbackUrl": "http://192.168.188.125:8080/docx/save?id=1111",
                "coEditing": {
                    "mode": "fast",
                    "change": true
                },
                "customization": {
                    "toolbarNoTabs": true,
                    "autosave": true,
                    "forcesave": true,
                    "hideRightMenu": true,
                },
                //用户信息
                "user": {
                    "id": "001", //用户ID
                    "name": "测试" //用户全名称
                }
            }
        });
</script>
</body>
</html>

就是引入了onlyoffice的api

在这里插入图片描述
将地址改为自己搭建的onlioffice服务地址
在这里插入图片描述
改为相应的本机地址

springboot

文档下载

 @RequestMapping("/d")
    public String downExcel(HttpServletResponse response) throws UnsupportedEncodingException {
        File file = new File("F:\\Desktop\\111.docx");
        // 如果文件存在,则进行下载
        if (file.exists()) {
            // 配置文件下载
            response.setHeader("content-type", "application/octet-stream");
            response.setContentType("application/octet-stream");
            // 下载文件能正常显示中文
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("aaa.doc", "UTF-8"));
            // 实现文件下载
            byte[] buffer = new byte[1024];
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            try {
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                OutputStream os = response.getOutputStream();
                int i = bis.read(buffer);
                while (i != -1) {
                    os.write(buffer, 0, i);
                    i = bis.read(buffer);
                }
                System.out.println("Download  successfully!");
                return "successfully";

            } catch (Exception e) {
                System.out.println("Download  failed!");
                return "failed";

            } finally {
                if (bis != null) {
                    try {
                        bis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (fis != null) {
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return "";
    }

保存修改

/**
     * 保存修改后的
     * @param request
     * @param response
     */
    @PostMapping("/docx/save")
    public void saveWord(HttpServletRequest request, HttpServletResponse response) {
        try {
            PrintWriter writer = response.getWriter();
            String body = "";
            try {
                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()) {
                writer.write("empty request.getInputStream");
                return;
            }
            JSONObject jsonObj = JSON.parseObject(body);
            int status = (Integer) jsonObj.get("status");
            int saved = 0;
            if (status == 2 || status == 3)//MustSave, Corrupted
            {
                String downloadUri = (String) jsonObj.get("url");
                try {
                    URL url = new URL(downloadUri);
                    java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();
                    InputStream stream = connection.getInputStream();
                    if (stream == null) {
                        throw new Exception("Stream is null");
                    }
                    // 从请求中获取要覆盖的文件参数定义"path"
//                    String path = request.getParameter("path");
                    String path = "F:\\Desktop\\111.docx";
                    System.err.println("====路径:"+path);
                    File savedFile = new File(path);
                    try (FileOutputStream out = new FileOutputStream(savedFile)) {
                        int read;
                        final byte[] bytes = new byte[1024];
                        while ((read = stream.read(bytes)) != -1) {
                            out.write(bytes, 0, read);
                        }
                        out.flush();
                    }
                    connection.disconnect();
                } catch (Exception ex) {
                    saved = 1;
                    ex.printStackTrace();
                }
            }
            System.out.print("编辑完成--------------11111");
            writer.write("{\"error\":" + saved + "}");
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

也就是给个基础的demo,更多的操作参考官网api哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1109989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虹科Pico技术交流会上海站启程 | 2+2课程新模式,入门汽车波形免拆诊断

虹科与Tech Gear免拆诊断学院即将于9月在上海举办汽车示波器交流会&#xff0c;本次交流会报名人满即开班&#xff0c;旨在为汽车示波器的基础入门和初阶选手提供学习机会。 本次交流会将在Tech Gear免拆诊断学院的车间进行。课程的安排灵活多样&#xff0c;包括理论课程和实践…

自定义内核模块读取进程的线性地址

打印指定进程的线性地址段 利用procfs查看进程的线性地址自定义内核模块读取进程的线性地址编译并加载内核模块 利用procfs查看进程的线性地址 自定义内核模块读取进程的线性地址 #include <linux/module.h> #include <linux/init.h> #include <linux/kernel.h…

双线性插值详解

双线性插值的原理网上资料非常多,本文重点介绍双线性插值实现的两种方式: 角对齐(coner_align = True) 和 边对齐(coner_align = False)。两种不能的方式下去实现双线性插值,目标图像中的每个像素点,它是如何计算取值的,本文会通过原理结合代码的方式将实现细节讲清楚。 1…

提高倾斜摄影三维模型顶层合并构建效率的技术方法初探

提高倾斜摄影三维模型顶层合并构建效率的技术方法初探 高效提高倾斜摄影三维模型顶层构建的技术方法有许多&#xff0c;本文将介绍几种常见的方法&#xff0c;并分析它们的优势和适用场景。这些方法包括数据处理与预处理、并行计算与分布式处理、智能化算法与模型优化等。 一、…

使用端口映射实现Spring Boot服务端接口的公网访问与调试

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…

13年老鸟整理,测试开发要学什么?测试开发学习路线,一篇概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、测试开发具备的…

表单制作软件有哪些?最火的8款表格制作软件?

表单制作软件是指用于创建、设计和管理各种类型的表格和调查问卷的工具。这些软件通常提供丰富的模板、自定义选项和数据分析功能&#xff0c;使用户能够轻松地生成专业级的表单。 以下是8款非常受欢迎的表格制作软件&#xff0c;并对其进行了详细介绍说明。 1. Microsoft Ex…

模块、服务、接口命名示例

一、项目整体架构图示例 二、模块命名规范 1.spring cloud 基础模块命名示例 模块项目名注册中心cloud-eureka网关cloud-zuul配置中心cloud-config-server熔断监控(ui)cloud-hystrix-dashboard健康检查cloud-hystrix-dashboard链路追踪cloud-zipkin-ui 2.基础common模块命名…

【无标题】element select下拉框下拉选项位置不对,显示到旁边,不显示到下拉框底部

磁贴是用iframe引用&#xff0c;下拉框高度过长导致不显示在下面&#xff0c;修改下拉选项的高度 <el-selectpopper-class"custom-drop-select-item minePressure"class"custom-drop-select"v-model"state.selectIndex"filterablevisible-cha…

Spring容器中同名 Bean 加载策略

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

PAM从入门到精通(十)

接前一篇文章&#xff1a;PAM从入门到精通&#xff08;九&#xff09; 本文参考&#xff1a; 《The Linux-PAM Application Developers Guide》 先再来重温一下PAM系统架构&#xff1a; 更加形象的形式&#xff1a; 五、主要函数详解 8. pam_setcred 概述&#xff1a; 设置…

S/4 HANA 大白话 - 财务会计-5 应收账款具体操作

1.创建供应商主数据 怎么去创建供应商主数据,怎么给分配到对应的账户组? 供应商和业务合作伙伴的关系是啥? 账户类别,账户组,和role角色又都是什么东东? 首先要了解,business partner现在就是你的第三方,客户,供应商或者雇员都可以是一个business partner。而且就算…

Javascript 流程控制 笔记/练习

流程控制 if 分支 单分支 if() 中的条件成立则执行 {} 中的语句&#xff0c;否则不执行 <script>if(条件){语句;} </script>双分支 if() 中的条件成立则执行 if 后{} 中的语句&#xff0c;否则执行 else{} 中的语句 <script>if(条件){语句;}else{语句;} <…

轮转数组------题解报告

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题解&#xff1a; 如果直接暴力双循环会时间超限&#xff0c;所以我选择了一个空间复杂度比较高的方法。直接再创建一个数组&#xff0c;然后对应位置替换&#xff0c;最后把值赋给原…

主打的就是一蠢

var x "abc"; // 不清楚x的用途function a(b, c, d) {// 一堆未注释的代码...// ... }// 混合使用单引号和双引号 var message "Its a beautiful day!";fetch("https://xxx/api/data").then(response > response.json()).then(data > {/…

敏朗公益 · 童心共融:福州市实验幼儿园携手敏朗共同举办活动!

2023年3月31日&#xff0c;福州市敏朗公益服务中心联合福州市实验幼儿园开展“童年童趣童心共融”主题融合活动&#xff0c;让星儿体验幼儿园生活&#xff0c;与普龄儿童一同分享快乐的童年。 本场活动是由福州市鼓楼区民政局、鼓楼区残疾人联合会指导&#xff0c;在第16届世界…

软件测试八股文,面试必备,查漏补缺

前言 时光荏苒&#xff0c;一转眼已踏入2023年&#xff0c;人员就业市场以往的寒冬也貌似有了转暖的迹象&#xff0c;身边大批的就业人员也开始了紧张的备战之中。近几周也和多家合作公司的HR进行了沟通&#xff0c;发现虽然岗位就业情况较去年有所好转&#xff0c;但整体的需…

如何选择适合自己的跨境商城源码

选择适合自己的跨境商城源码是每个想要开展跨境电商业务的企业所面临的重要决策。源码的选择直接关系到商城功能的完整性、运营的便捷性以及未来的可定制性。在众多源码供应商中&#xff0c;我们为您提供以下几点参考&#xff0c;帮助您做出明智的选择。 1. 功能完整性 一个适合…

电脑断电后无法正常启动?这样解决!

“昨天公司遭遇突然的停电&#xff0c;导致无法继续工作&#xff0c;只得提前下班回家。今天回到办公室&#xff0c;电脑却陷入了启动问题。我试图多次重启&#xff0c;希望进入安全模式&#xff0c;但却一直卡在Windows启动进度条&#xff0c;紧接着出现了一个蓝底白字的画面&…

三级等保-linux服务器三权分立设置

安全问题 安全控制点 风险分析 风险等级 标准要求 加固建议 服务器未严格按照系统管理员权限、审计管理员权限、安全管理员权限进行分配管理员账户&#xff0c;未实现管理员用户的最小权限划分。 访问控制 可能存在管理员越权操作的风险 中 d)应授予管理用户所需的最…