最近做项目用到word、excel的在线浏览编辑功能,在网上找了很多的工具软件,一开始用的是office-online-server,参考office官网文档,最后领导认为他的样式过于简单,支持功能比较少,所以撤换掉用了page office。此次开发用到的是卓正公司的pageoffice集成,需要购买使用。

简单介绍下Page Office:

1. 在web网页里打开、编辑、打印预览、打印Word、Excel、PowerPoint等Office文档。

2. 强大的全屏/还原功能,便于用户编辑、浏览Office文档,又不影响网页布局美观。

3. 文档并发控制机制。为了防止同时在线编辑导致的混乱,PageOffice会发出通知并阻止其他人编辑此文档,直到你保存离开或时间锁过期。

4. 在线只读安全浏览Word、Excel、PowerPoint、PDF等Office文档,防复制粘贴、下载、打印等。

5. 提供Word修订痕迹、手写批注、圈阅划线、键盘批注、电子印章等OA公文模块的必备功能。

6. 根据数据库动态将数据,包括文本、图片、表格等填充、导出到Word、Excel模板中指定的位置处,并且可以动态指定内容的各种格式。支持批量导出。支持Word动态模板套红。支持动态创建、填充、生成新文档。

7. 提取Word、Excel文档中指定位置处的内容,包括文本、图片(Excel暂不支持)、表格等,保存到数据库。

8. 支持客户端不显示Word、Excel编辑器视图情况下的Word、Excel数据的导入导出功能。

9. 支持另存为HTML、MHT、PDF文档并发布到服务器的功能。

10. 支持动态生成PDF的功能。

11. 支持在线打开显示PDF(客户端无需安装PDF阅读器)。

12. 根据用户权限控制Word、Excel文档中用户可以编辑的区域,便于实现流转、会签、多用户实时编辑。

13. 合并多个Word文档为一个Word文档;拆分一个Word文档为多个Word文档。

14. 将Word、Excel设置成表单输入模式,用户只能在文档中指定的位置处输入内容,提交时可获取用户输入的内容。支持弹出网页对话框辅助用户输入数据。

直接介绍集成的步骤:

1. 到卓正官网上下载http://www.zhuozhengsoft.com/dowm/下载最新版的PageOffice 4.5 for JAVA项目,里面包含Samples、集成文件、序列号等;

2. 将集成文件里的jar包拷贝到src/lib目录下,添加maven本地依赖:

        <dependency><groupId>com.zhuozheng</groupId><artifactId>pageoffice</artifactId><version>4.5.0</version><scope>system</scope><systemPath>${project.basedir}/src/lib/pageoffice4.5.0.6.jar</systemPath></dependency><dependency><groupId>com.sql</groupId><artifactId>sqlite-jdbc</artifactId><version>3.7.2</version><scope>system</scope><systemPath>${project.basedir}/src/lib/sqlite-jdbc-3.7.2.jar</systemPath></dependency>

这里注意打jar包运行时,需要将两个本地jar打进项目jar里,需要添加如下maven插件配置:

    <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><includeSystemScope>true</includeSystemScope></configuration></plugin></plugins><finalName>${project.artifactId}</finalName></build>

3.新建word.html和index.html两个文件,这里时spring boot集成thymeleaf:

index.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title><!-- office插件js begin 必须引入--><script type="text/javascript" src="jquery.min.js"></script><script type="text/javascript" src="pageoffice.js" id="po_js_main"></script><!-- end -->
</head>
<body>
<a href="javascript:POBrowser.openWindowModeless('/word','width=1200px;height=800px;');">打开文件</a>
</body>
</html>

word.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><input id="Button1" type="button" value="隐藏/显示 标题栏"  onclick="return Button1_onclick()" />
<input id="Button2" type="button" value="隐藏/显示 菜单栏" onclick="return Button2_onclick()" />
<input id="Button3" type="button" value="隐藏/显示 自定义工具栏"  onclick="return Button3_onclick()" />
<input id="Button4" type="button" value="隐藏/显示 Office工具栏"  onclick="return Button4_onclick()" /><div style="width:1000px;height:700px;" th:utext="${pageoffice}"> </div>
<script type="text/javascript">function Save() {document.getElementById("PageOfficeCtrl1").WebSave();}function PrintFile(){document.getElementById("PageOfficeCtrl1").ShowDialog(4);}function IsFullScreen(){document.getElementById("PageOfficeCtrl1").FullScreen = !document.getElementById("PageOfficeCtrl1").FullScreen;}function CloseFile(){window.external.close();}function BeforeBrowserClosed(){if (document.getElementById("PageOfficeCtrl1").IsDirty){if(confirm("提示:文档已被修改,是否继续关闭放弃保存 ?")){return  true;}else{return  false;}}}// 隐藏/显示 标题栏function Button1_onclick() {var bVisible = document.getElementById("PageOfficeCtrl1").Titlebar;document.getElementById("PageOfficeCtrl1").Titlebar = !bVisible;}// 隐藏/显示 菜单栏function Button2_onclick() {var bVisible = document.getElementById("PageOfficeCtrl1").Menubar;document.getElementById("PageOfficeCtrl1").Menubar = !bVisible;}// 隐藏/显示 自定义工具栏function Button3_onclick() {var bVisible = document.getElementById("PageOfficeCtrl1").CustomToolbar;document.getElementById("PageOfficeCtrl1").CustomToolbar = !bVisible;}// 隐藏/显示 Office工具栏function Button4_onclick() {var bVisible = document.getElementById("PageOfficeCtrl1").OfficeToolbars;document.getElementById("PageOfficeCtrl1").OfficeToolbars = !bVisible;}
</script>
</body>
</html>

4.编写controller接口

package com.central.file.controller;import com.zhuozhengsoft.pageoffice.FileSaver;
import com.zhuozhengsoft.pageoffice.OpenModeType;
import com.zhuozhengsoft.pageoffice.PageOfficeCtrl;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;@RestController
public class PageOfficeController {@RequestMapping(value="/index", method=RequestMethod.GET)public ModelAndView showIndex(){ModelAndView mv = new ModelAndView("index");return mv;}/*** office online打开** @param request* @param map* @return*/@RequestMapping(value="/word", method=RequestMethod.GET)public ModelAndView showWord(HttpServletRequest request, Map<String,Object> map){//--- PageOffice的调用代码 开始 -----PageOfficeCtrl poCtrl=new PageOfficeCtrl(request);poCtrl.setServerPage("/poserver.zz");//设置授权程序servletpoCtrl.addCustomToolButton("保存","Save()",1); //添加自定义按钮poCtrl.addCustomToolButton("打印", "PrintFile()", 6);poCtrl.addCustomToolButton("全屏/还原", "IsFullScreen()", 4);poCtrl.addCustomToolButton("关闭", "CloseFile()", 21);poCtrl.setSaveFilePage("/save");//设置保存的actionpoCtrl.webOpen("D:\\test.docx", OpenModeType.docAdmin,"张三");poCtrl.setCaption("信息平台");map.put("pageoffice",poCtrl.getHtmlCode("PageOfficeCtrl1"));//--- PageOffice的调用代码 结束 -----ModelAndView mv = new ModelAndView("word");return mv;}/*** 保存office** @param request* @param response*/@RequestMapping("/save")public void saveFile(HttpServletRequest request, HttpServletResponse response){FileSaver fs = new FileSaver(request, response);//保存文件fs.saveToFile("D:\\test.docx");fs.close();}}

5. 启动类XXXApplication.java增加pageoffice授权servlet,注解poSysPath用来存放卓正的注册信息的:

    @Value("${file.save.path}")String poSysPath;/*** 添加PageOffice的服务器端授权程序Servlet(必须)* @return*/@Beanpublic ServletRegistrationBean servletRegistrationBean() {com.zhuozhengsoft.pageoffice.poserver.Server poserver = new com.zhuozhengsoft.pageoffice.poserver.Server();//设置PageOffice注册成功后,license.lic文件存放的目录poserver.setSysPath(poSysPath);ServletRegistrationBean srb = new ServletRegistrationBean(poserver);srb.addUrlMappings("/poserver.zz");srb.addUrlMappings("/posetup.exe");srb.addUrlMappings("/pageoffice.js");srb.addUrlMappings("/jquery.min.js");srb.addUrlMappings("/pobstyle.css");srb.addUrlMappings("/sealsetup.exe");return srb;}

6.启动项目,访问http://localhost:8080/index,点击打开文件,会提示安装卓正的Page Office,点击安装,成功后会提示注册,这时候把第一步下载的序列号输入,其他的随便填写,就可以打开word的编辑了;

源码地址  https://gitee.com/acelee723/acelee-pageoffice-demo

Spring Boot/Spring Cloud 集成Page Office支持word、excel、ppt在线浏览编辑相关推荐

  1. php word excel转pdf文件怎么打开,php office文件(word/excel/ppt)转pdf文件,pptpdf

    php office文件(word/excel/ppt)转pdf文件,pptpdf 把代码放到了github上,点击进入 前阶段有个项目用到了线上预览功能, 关于预览office文件实现核心就是,把o ...

  2. NTKO 文件在线编辑并保存 目前平台板plus支持 word excel ppt

    以下是本人在开发过程中使用NTKO 控件进行在线打开文件并针对 word  excel  ppt 文件在线编辑,编辑之后保存.使用控件里的保存功能 第一步: 在这之前您的jsp或者js文件中已经使用o ...

  3. Spring - Spring Boot Spring Cloud

    Spring -> Spring Boot > Spring Cloud 这几天刚刚上班,公司用的是Spring Cloud,接触不多.我得赶快学起来. 想学习就必须得知道什么是微服务,什 ...

  4. Spring Boot最新版集成邮件发送功能大全

    Spring Boot最新版集成邮件发送功能大全 前言 一.开启SMTP服务并获取授权码 二.创建Spring Boot项目 1.配置邮箱基本信息: 2.简单邮件发送: 3.发送带附件的邮件: 5.使 ...

  5. spring boot 和cloud 版本升级

    spring boot 和cloud 版本对应 背景:原来一直用的版本是Hoxton.SR12 +2.3.10.RELEASE(SR12一路升,几乎没有影响,不需要测试,但是换大版本就有点担心) 去年 ...

  6. 搞懂分布式技术14:Spring Boot使用注解集成Redis缓存

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/80785403 为了提高性能,减少数据库的压力,使用 ...

  7. Spring Boot+Spring Cloud实现itoken项目

    itoken项目简介 开发环境 操作系统: Windows 10 Enterprise 开发工具: Intellij IDEA 数据库: MySql 5.7.22 Java SDK: Oracle J ...

  8. Spring Boot项目中集成Elasticsearch,并实现高效的搜索功能

    Spring Boot项目中集成Elasticsearch 前言 环境准备 引入依赖 配置Elasticsearch连接信息 定义实体类 定义Elasticsearch操作接口 实现搜索功能 总结 前 ...

  9. Spring Boot+Spring Cloud基础入门(一)简单介绍

    转自:https://blog.csdn.net/mingwei_cheng/article/details/80939833 在经历了毕业的摧残后,终于又有时间来更新博客了,毕业设计项目是写了一个基 ...

  10. Spring Boot 极简集成 Shiro

    点击关注公众号,Java干货及时送达 1. 前言 Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理. Shiro有三大核心组件: Subject: ...

最新文章

  1. Python中将pandas的dataframe拷贝到剪切板并保持格式实战:to_clipboard()函数、复制到Excel文件、复制到文本文件(默认是tsv格式)、复制到文本文件(设置逗号分隔符)
  2. 【连载】高效程序员的45 个习惯(不断更新中。。。)
  3. 淘宝API商家自用型应用程序全部源代码和详细的帮助文档(1元有偿提供)
  4. linux io模拟时序,spi四种模式io模拟时序
  5. php和python和java-python与java区别
  6. 使用 ES6 的浏览器兼容性问题
  7. String课后作业
  8. 51Nod-1002 数塔取数问题【DP】
  9. Filter Concatenationd的理解
  10. Python 支付宝转账到银行卡二维码制作步骤分享
  11. Python笔记-OpenCV图像处理和人脸识别
  12. ns账号切换服务器对存档有影响吗,《集合啦!动物森友会》不支持存档转移 更换Switch需要重新游戏...
  13. python题目-青蛙跳井口
  14. iOS系统开发入门至精通学习指南
  15. zotero导出所有的bib文件
  16. 亚马逊、速卖通、Shopee阿里国际站、mercari、沃尔玛、newegg、美客多等跨境平台卖家如何有效结合测评,补单打破瓶颈
  17. 个人简介之物理层安全
  18. CSDN产品公告第3期:博客数据统计功能上线,OFFER大挑战等你来!
  19. js开发html5游戏,JS开发HTML5游戏《神奇的六边形》(五)
  20. Unity 3D中的射线与碰撞检测 1

热门文章

  1. 全极化SAR影像地物分类方法研究
  2. Android 调用 系统选择器 选择 图片 或 文件(ACTION_PICK、ACTION_GET_CONTENT)
  3. 阅读源码的经验总结,以进一步的提升自己,加油小甜妮儿
  4. VMWare 虚拟机网络共享给宿主机
  5. 算法笔记(七)扩大感受野SPP/ASPP/RBF
  6. python生成中文字符画_python实战练手项目---字符画及其原理
  7. 软件工程课程设计分组与选题名单
  8. Kubernetes【容器运行时】Kata Containers 与 gVisor
  9. 淘宝闲鱼京东等电商api的简单调用
  10. el-menu菜单 -- unique-opened 子菜单唯一性失效