onlyoffice 在线编辑

news/2024/11/30 13:42:39/

文章目录

  • 一、拉取镜像,启动
  • 二、配置onlyoffice
  • 三、编写保存接口
  • 四、添加中文字体

一、拉取镜像,启动

要使用onlyoffice的在线编辑,需要从docker拉取镜像

onlyoffice/documentserver
docker pull onlyoffice/documentserver

启动onlyoffice

docker run --name onlyoffice -i -t -d -p 8000:80 onlyoffice/documentserver

查看日志
docker logs -f --tail=100 [容器id]

启动后通过ip和设置的端口打开页面查看是否启动成功

二、配置onlyoffice

创建页面,导入api.js

<script type="text/javascript" src="http://192.168.3.19:8000/web-apps/apps/api/documents/api.js"></script>

添加div

<div id="placeholder" style="height: 100%;"></div>

配置如下:需要注意的是,onlyoffice中的配置的地址都是onlyoffice服务能直接访问到的地址,如:http://192.168.2.172:25001/documen/aaa.docx,不能使用127.0.0.1和localhost

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html style="height: 100%;">
<head><title></title><meta name="keywords" content="HTML5 Bootstrap 3 Admin Template UI Theme" /><meta name="description" content="Monster Dashboard - Multiskin Premium Admin Dashboard"><meta name="author" content="MonsterDashboard"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script type="text/javascript" src="${pageContext.request.contextPath}/static/public/js/jquery/jquery-1.11.1.min.js"></script><script type="text/javascript" src="http://192.168.3.19:8000/web-apps/apps/api/documents/api.js"></script><style type="text/css"></style>
</head>
<body style="height: 100%; margin: 0;"><div id="placeholder" style="height: 100%;"></div>
</body>
<script>(function(){//业务idvar busid="${param.busid}";console.log(getRealUrl());$.ajax({type:"post",url:"${pageContext.request.contextPath}/file/getFileByBusId",data:{busId:busid},success:function(res){var data = jQuery.parseJSON(res);if(data.list.length>0){var json=data.list[0];editFile(json.id,json.temp1+json.filePath);}}})
function editFile(key,path){console.log("path:"+path);var fileName=path.substring(path.lastIndexOf("/")+1);console.log("fileName:"+fileName);var suff=fileName.substring(fileName.lastIndexOf(".")+1);console.log("suff:"+suff);var documentType="word";//跟据后缀判断打开文件类型var WORD=["doc", "docm", "docx", "dot", "dotm", "dotx", "epub", "fodt", "fb2", "htm", "html", "mht", "odt", "ott", "pdf", "rtf", "txt", "djvu", "xml", "xps"];var CELL=["csv", "fods", "ods", "ots", "xls", "xlsm", "xlsx", "xlt", "xltm", "xltx"];var SLIDE=["fodp", "odp", "otp", "pot", "potm", "potx", "pps", "ppsm", "ppsx", "ppt", "pptm", "pptx"];if(WORD.indexOf(suff)>-1){documentType="word";}if(CELL.indexOf(suff)>-1){documentType="cell";}if(SLIDE.indexOf(suff)>-1){documentType="slide";}var config={"height": "100%","width": "100%","documentType": documentType,//文件类型word,cell,slide"lang": "zh-CN",//中文菜单//要打开的文档配置"document": {"fileType": suff, //文件类型(后缀)"key": new Date().getTime()+"",//根据key判断打开的文件 "title": fileName,//文件名称(不含后缀)"url": path//文件路径,必须是onlyoffice服务能直接访问的文件路径},//编辑配置"editorConfig": {"lang": "zh-CN",//中文菜单"mode": "edit",//编辑模式//保存文件的回调"callbackUrl": getRealUrl()+"/document/saveOnliOfficeFile?fid="+key,"customization":{"forcesave":"true",//开启手动保存"atuosave":"false", //开启自动保存}}};new DocsAPI.DocEditor("placeholder", config);
}
//===========获取基础地址=============function getRealUrl(){var curWwwPath = window.document.location.href;var pathname= window.document.location.pathname;var contentPath=pathname.substring(0,find(pathname,"/",1));var pos = curWwwPath.indexOf(pathname);var localhostPath = curWwwPath .substring(0,pos);var real_url = localhostPath+contentPath;//拼接项目基础路径return real_url;}function find(str,cha,num){var x=str.indexOf(cha);for(var i=0;i<num;i++){x=str.indexOf(cha,x+1);}return x;}//===========获取基础地址 end=============})();
</script>
</html>

三、编写保存接口

上一步的保存文件的接口为/document/saveOnliOfficeFile,在自动保存和手动保存时都会调用

         6 - 文档正在编辑,但当前文档状态已保存,7 - 强制保存文档时出错.* *///关闭后保存if (status == 2 || status == 3 ) {/** 当我们关闭编辑窗口后,十秒钟左右onlyoffice会将它存储的我们的编辑后的文件,* 此时status = 2,通过request发给我们,我们需要做的就是接收到文件然后回写该文件。* *//** 定义要与文档存储服务保存的编辑文档的链接。* 当状态值仅等于2或3时,存在链路。* */String downloadUri = (String) jsonObj.get("url");System.out.println("====文档编辑完成,现在开始保存编辑后的文档,其下载地址为:" + downloadUri);//解析得出文件名//String fileName = downloadUri.substring(downloadUri.lastIndexOf('/')+1);String fileName = request.getParameter("fileName");System.out.println("====下载的文件名:" + fileName);URL url = new URL(downloadUri);java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();InputStream stream = connection.getInputStream();//更换为实际的路径,保存硬盘中File savedFile = new File("E:\\onlyoffice\\"+DateTools.getFormatDate("yyyy-MM-dd")+"\\"+fileName);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();}//手动保存时if(status == 6){/** 当我们关闭编辑窗口后,十秒钟左右onlyoffice会将它存储的我们的编辑后的文件,* 此时status = 2,通过request发给我们,我们需要做的就是接收到文件然后回写该文件。* *//** 定义要与文档存储服务保存的编辑文档的链接。* 当状态值仅等于2或3时,存在链路。* */String downloadUri = (String) jsonObj.get("url");System.out.println("====文档编辑完成,现在开始保存编辑后的文档,其下载地址为:" + downloadUri);//解析得出文件名//String fileName = downloadUri.substring(downloadUri.lastIndexOf('/')+1);String fileid = request.getParameter("fid");File_Entity fe=fileService.getFileById(fileid);String fileName=fe.getFileName();String uuidFileName=fe.getUuidFileName();String filePath=fe.getFilePath();System.out.println("====下载的文件名:" + fileName);URL url = new URL(downloadUri);java.net.HttpURLConnection connection = (java.net.HttpURLConnection) url.openConnection();InputStream stream = connection.getInputStream();//保存到原路径中File savedFile = new File(BigFileUploadUtil.getBasePath()+"/"+filePath);//另存为,保存硬盘中,原文件不变//File savedFile = new File("E:\\onlyoffice\\"+DateTools.getFormatDate("yyyy-MM-dd")+"\\"+fileName);if (!savedFile.getParentFile().exists()) {savedFile.getParentFile().mkdirs();}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 e) {e.printStackTrace();}/** status = 1,我们给onlyoffice的服务返回{"error":"0"}的信息,* 这样onlyoffice会认为回调接口是没问题的,* 这样就可以在线编辑文档了,* 否则的话会弹出窗口说明* */JSONObject obj=new JSONObject();obj.put("error","0");writer.write(JSONObject.fromObject(obj).toString());writer.close();writer.flush();}

四、添加中文字体

先删除onlyoffice自带的字体

docker exec -it (容器id) /bin/bash 进入容器删除默认字体
cd /usr/share/fonts/
rm -rf *
cd /var/www/onlyoffice/documentserver/core-fonts/
rm -rf *

将字体cp到容器内

docker cp /home/fonts/(当前字体目录) 容器id:/usr/share/fonts/truetype/custom(目标目录)
//再次进入容器:
docker exec -i -t adb(adb是容器id的前三位) /bin/bash
//执行:
/usr/bin/documentserver-generate-allfonts.sh

执行结束之后,不用重启onlyoffice,清一下浏览器缓存,再查看效果

修改好的字体
最后看一下效果图
在这里插入图片描述


http://www.ppmy.cn/news/706245.html

相关文章

JodConverter 4.1.0 + OpenOffice 4.1.4 文档转换(Spring boot 1.5.8)

注&#xff1a;本实例最终在 CentOS 7 上运行&#xff0c;Spring boot 最好是1.5.7 以上&#xff01; 1、Maven 配置&#xff0c;最基本 JAR 包&#xff0c;当然还有可能需要其他包&#xff0c;根据提示或项目情况导入&#xff1a; <dependency><groupId>org.jodc…

onlyoffice-api

onlyoffice-api 下载 官网 配置文档 安装文档 demo下载

java引入openoffice,实现在线预览功能

注&#xff1a;代码相关openoffice jar包下载地址&#xff1a;jar包地址 注:欢迎关注vuespringbootshiro开发的项目 官网地址&#xff1a;进入官网 package com.sk.controller.onlineread;import net.sf.json.JSONObject; import org.apache.commons.io.FilenameUtils; impor…

Java使用OpenOffice在线预览Office及PDF

使用OpenOffice可实现在线预览office文件内容 更多精彩 更多技术博客&#xff0c;请移步 asing1elife’s blog 思路 用 OpenOffice 将 word / excel / ppt 转换为 pdf用 pdf.js 将转换后的 pdf 显示在浏览器中显示 准备 安装 OpenOffice &#xff0c;参见 OpenOffice 在 L…

onlyoffice集成实现编辑预览

文章目录 前言一、使用docker方式进行安装1. 系统要求2.安装docker3.安装onlyoffice文件服务器 二、页面集成1.使用vue3进行集成安装依赖使用组件 2.html集成 三、回调Demo总结 前言 ONLYOFFICE 文档开发者版ONLYOFFICE Docs 是一款功能强大的在线编辑器&#xff0c;适用于文本…

java用openOffice实现在线预览

1. 原理 将 office 文档转换为 pdf &#xff0c;返回文件流给前端实现预览。 当前的主浏览器都支持直接打开pdf文件&#xff0c;从而实现文件预览。如果是其他格式文件则得下载&#xff0c;因此用openOffice实现文件转pdf格式。 1&#xff09;openOffice的安装 下载地址&#…

JAVA结合OpenOffice转换office文档-jodconverter-core-3.0-beta-4

首先机器要安装openoffice软件&#xff0c;下载链接&#xff1a;http://www.openoffice.org/download/index.html 学习结合网友写的&#xff0c;直接给出代码&#xff1a; import java.io.File; import java.io.IOException; import java.util.Properties;import org.artofsolv…

openOffice pdf.js spring boot 微信在线预览office pdf文件

下载openoffice 并安装//pdf.js 案例 https://mozilla.github.io/pdf.js/examples/index.html#interactive-examples//openoffice 连接不上 进入安装目录 cmd 运行以下命令 soffice -headless -accept"socket,host127.0.0.1,port8100;urp;" -nofirststartwizard<!…