onlyoffice使用,前端+java

该博客介绍了如何在前端页面中集成ONLYOFFICE文档编辑器,通过JavaScript API设置文档参数,并在后台处理文件流,实现文件的加载与编辑。回调URL用于文件状态更新,尤其是文件保存时的处理。注意文件类型、权限配置以及文件流的正确处理。
摘要由CSDN通过智能技术生成

一、前端

onlyoffice使用

页面引用
<head>
	<script type="text/javascript" src="http://192.168.58.138:9001/web-apps/apps/api/documents/api.js"></script>
</head>
<body>
	<div id="placeholder"></div>
</body>
加载文档
var docEditor = new DocsAPI.DocEditor("placeholder", {//placeholder为要放入的位置
				"document" : {
					"fileType": "docx",//文件类型
					"key": "EF12KFF",//docserver会通过key读取缓存,如果文档进行修改要修改key值
					"title": "测试文档",//显示文档标题
					"url": "http://192.168.0.1:8080/test/onlyoffice/onlyofficeLoad"//可以为静态地址,也可为方法地址
				},
				"documentType": "text",//onlyoffice可打开word、excel、ppt==
				"editorConfig": {
					"callbackUrl": "",//回调地址,一定要保证docserver可以请求到,否则开不开文件
					"lang": "zh-CN",
					"mode": "view",//只读view,编辑edit
				"permissions":{
					"comment": false,//是否可以评论
					"download": false,//是否可以下载
					"edit": true,//是否可以编辑
					"fillForms": true,//
					"print": false,//是否可以打印
					"review": true//
				}
			});
后台方法

url:获取文件的请求,使用以下方法返回要打开的文件流

@RequestMapping(value = "/onlyofficeLoad")
@ResponseBody
public void onlyofficeLoad(HttpServletRequest request, HttpServletResponse response){
	response.reset();
   	fileName = URLEncoder.encode(fileName, "UTF-8");
    fileName = fileName.replaceAll("\\+", "%20");

    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"; " + "filename*=UTF-8''" + fileName);
    response.setCharacterEncoding("UTF-8");
    response.setContentType("application/octet-stream");//注意类型一定要是octet-stream
    response.setContentLength(inputStream.available());
    OutputStream sos = response.getOutputStream();
    byte[] bytes = new byte[1024 * 512];
    int i = -1;
    while ((i = inputStream.read(bytes)) != -1){
    	sos.write(bytes, 0, i);
    }
    sos.flush();
    StreamUtils.closeStream(inputStream);
}

callbackUrl:当文件打开或关闭都会调用改方法(文件关闭会在10秒后发送请求)

@RequestMapping(value = "/generateReport", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
@ResponseBody
public void generateReport(HttpServletRequest request, HttpServletResponse response){
PrintWriter writer = null;
	try{
        String body = "";
        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()) {
            writer.write("empty request.getInputStream");
            return;
        }

        JSONParser parser = new JSONParser();
        JSONObject jsonObj = (JSONObject) parser.parse(body);
        int status = Integer.parseInt(jsonObj.get("status").toString());
        int saved = 0;
        //statusAPI见下表
        if (status == 2 || status == 3 || status == 6) {
            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");
                }

                filePath = "";
                File fileDir = new File(filePath);
                if (!fileDir.isDirectory()){
                    fileDir.mkdirs();
                }
                File savedFile = new File(upload_file_path + filePath + fileName);
                if (savedFile.exists()) {
                    savedFile.delete();
                }
                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();
            }
        }
        writer.write("{\"error\":" + saved + "}");
        System.out.println("保存成功");
    } catch (ParseException e) {
        System.out.println("保存异常");
        writer.write("{\"error\":\"-1\"}");
        e.printStackTrace();
    }
}

注:上述代码逻辑不可改变,docserver会根据writer.write()对文件进行操作。

回调的status共有6种,仅当状态为2,3,6时会去保存文件
status
1正在编辑文件,
2文件已准备好保存,
3发生文件保存错误,
4文件已关闭且未做任何更改,
6正在编辑文档,但保存了当前文档状态,
7强制保存文档时发生错误。

————————————————
版权声明:本文为CSDN博主「学习要趁早z」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42677452/article/details/116197517

  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
### 回答1: OnlyOffice是一款基于云的办公套件,它提供了文档处理、电子表格、幻灯片、电子邮件、协作和团队管理等功能。OnlyOffice的优点是具有跨平台性、开放源代码和安全性。它能够与各种设备和操作系统兼容,例如Windows、Linux、Mac OS X、Android、iOS等。同时,OnlyOffice也支持多语言,可以满足全球用户的不同语言需求。 Java是一种广泛应用于企业级开发的编程语言,它具有优秀的可移植性、跨平台性、强大的API和丰富的类库。 在OnlyOffice中,Java主要用于与数据库和其他后端系统的交互,提供响应速度较快和较好的扩展性。 Vue则是一种流行的前端框架,用于构建用户界面。Vue的优点是简单易用、轻量级、高效和灵活。因此,Vue往往用于OnlyOffice的用户界面的开发,提供良好的用户体验和开发效率。Vue还具有生态系统完善的特点,可以通过丰富的插件和组件进行快速开发。 综上所述,OnlyOffice Java Vue的结合,可以实现一个高效、安全、跨平台、易于扩展的办公自动化解决方案。 ### 回答2: OnlyOffice是一款支持多种文档格式的开源办公软件,它可以替代Microsoft Office和Google Docs等商业软件。OnlyOffice支持在线多人协作编辑文档,兼容Microsoft Office和OpenDocument格式,还提供了电子表格、幻灯片、PIM等功能。同时OnlyOffice也提供了丰富的API和SDK支持,可以方便地进行二次开发和集成。 Java是一种跨平台的编程语言,可以在不同的操作系统和硬件上运行,因此被广泛用于开发Web应用和移动应用。Java提供了丰富的开发框架和工具,如Spring、Hibernate、Maven等,使得开发效率得到了显著提升。 Vue是一款流行的JavaScript框架,用于构建Web界面。它具有轻量级、响应式和易于扩展等特点,特别适合快速构建单页面应用(SPA)。Vue提供了强大的数据绑定和组件化功能,可以使得开发者更加灵活地构建复杂的UI界面。 将OnlyOfficeJava和Vue进行整合可以实现一些有趣的功能,比如在线协作编辑文档、构建Web应用的前端界面等。由于OnlyOffice和Vue都是基于JavaScript开发的,因此它们之间的协作非常顺畅,而Java则可以充当后台的逻辑处理和数据存储等角色,从而实现全面的开发需求。 ### 回答3: OnlyOffice是一款强大的开源协作平台,它支持文档处理、电子表格、幻灯片展示等多种办公应用程序,可方便地扩展、自定义和集成到其他应用程序中。同时,OnlyOffice提供基于云端和自己部署的版本,用户可以根据自己的需求进行选择。 Java是一种流行的编程语言,通常用于构建复杂的企业应用程序。OnlyOffice可以使用Java进行集成和自定义,以满足企业应用程序的需求。 Vue是一种流行的JavaScript框架,用于构建Web应用程序。OnlyOffice也可以使用Vue进行自定义和集成,以提供更好的用户体验和更高效的功能。 综上所述,OnlyOfficeJava和Vue可以协同工作,提供可靠的文档处理和协作平台,以满足企业和个人的办公需求。这些技术的结合旨在帮助用户更好地管理和组织工作流程,提高生产力和效率。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习要趁早z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值