Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用PageOffice实现文档(word,excel,pdf)在线预览编辑[通俗易懂]

使用PageOffice实现文档(word,excel,pdf)在线预览编辑[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-08-18 11:11:21
发布于 2022-08-18 11:11:21
7.2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
最近发现一款不错的插件的PageOffice,地址是:http://www.zhuozhengsoft.com/Technical/  他可以实现word,excel、pdf在线预览以及在线编辑。虽然商用的话需要收费,但是有免费的试用版,在实现自己毕业设计或是做样品的时候 是一个不错的选择。他同时支持java\c#\php.一旦有了正真的项目花钱再买也可以。同时自己也可以熟悉如何使用。接着下面实现在线预览。

首先自己需要安装PageOffice控件 目前最新版本是4.2 。下载地址是:http://www.zhuozhengsoft.com/dowm/ 其中包括实例代码。

1、安装完后需要给自己的项目添加pageoffice4.jar 和java 添加jar包没有区别。

2、启动的时候第一次使用试用版会弹出一个框,需要添加一些信息,有一个序列号在最后我写了。剩下 那个就是随便填写就可以。同时他会生成一个文件就是license.lic。他会在tomcat 项目部署的lib下。假如每次启动都需要添加的话。你就需要把tomcat 部署项目lib 里的license.lic 复制到你的本地项目中。

3、预览后台代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	public String openbar(HttpServletRequest request, HttpServletResponse response, @PathVariable int id,
			@PathVariable int flag) {
		// 设置PageOffice服务器组件
		PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
		request.setAttribute("poCtrl1", poCtrl1);
		poCtrl1.setServerPage(request.getContextPath() + "/poserver.zz"); // 此行必须
		poCtrl1.setTitlebar(false); // 隐藏标题栏(pageoffice的标题)
		poCtrl1.setMenubar(false); // 隐藏菜单栏(文件一个设置)
		poCtrl1.setOfficeToolbars(false);// 隐藏Office工具条(word 的编辑按钮)
		// poCtrl1.setCustomToolbar(false);// 隐藏自定义工具栏(保存 关闭 全屏)
		poCtrl1.addCustomToolButton("打印", "ShowPrintDlg()", 6);
		poCtrl1.addCustomToolButton("全屏切换", "SwitchFullScreen()", 4);
		poCtrl1.addCustomToolButton("关闭", "close", 21);
		List<FileMeta> entity = fileMetaService.getList(getEntity(flag, id));
		String path = ZipService.getPath(entity.get(0));
		String realpath = path.replace("/", "\\\\");
		String suffix = path.substring(path.lastIndexOf(".") + 1);
		if ("doc".equals(suffix) || "docx".equals(suffix)) {
			poCtrl1.webOpen(realpath, OpenModeType.docReadOnly, "张三");
		} else if ("xls".equals(suffix) || "xlsx".equals(suffix)) {
			poCtrl1.webOpen(realpath, OpenModeType.xlsReadOnly, "张三");
		}
		// 打开文件
		return "OpenWord";
	}

4’、在线编辑:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 在线编辑
	 * 
	 * @param request
	 * @param response
	 * @param id
	 * @param flag
	 * @return
	 */
	@RequestMapping("openword/{flag}/{id}")
	public String openword(HttpServletRequest request, HttpServletResponse response, @PathVariable int id,
			@PathVariable int flag) {
		PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
		request.setAttribute("poCtrl", poCtrl);
		poCtrl.setTitlebar(false);
		// 设置服务页面
		poCtrl.setServerPage(request.getContextPath() + "/poserver.zz");
		// 添加保存按钮
		poCtrl.addCustomToolButton("保存并关闭", "Save", 1);
		poCtrl.addCustomToolButton("打印", "ShowPrintDlg()", 6);
		poCtrl.addCustomToolButton("全屏切换", "SwitchFullScreen()", 4);
		// 设置保存的action
		poCtrl.setSaveFilePage(request.getContextPath() + "/wep/savefile/" + flag);
		// 打开word
		List<FileMeta> entity = fileMetaService.getList(getEntity(flag, id));
		String path = ZipService.getPath(entity.get(0));
		String realpath = path.replace("/", "\\\\");
		String suffix = path.substring(path.lastIndexOf(".") + 1);
		if ("doc".equals(suffix) || "docx".equals(suffix)) {
			poCtrl.webOpen(realpath, OpenModeType.docNormalEdit, "张三");
		} else if ("xls".equals(suffix) || "xlsx".equals(suffix)) {
			poCtrl.webOpen(realpath, OpenModeType.xlsNormalEdit, "张三");
		}
		return "Word";
	}

5、在线编辑需要保存,所以有在线保存:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
	 * 保存
	 * 
	 * @param request
	 * @param response
	 * @param flag
	 */
	@RequestMapping("savefile/{flag}")
	public void savefile(HttpServletRequest request, HttpServletResponse response, @PathVariable int flag) {
		FileSaver fs = new FileSaver(request, response);
		if (flag == 1) {// hse 保存路径
			fs.saveToFile("D:\\Demo\\conhse\\" + fs.getFileName());
		} else if (flag == 2) {
			fs.saveToFile("D:\\Demo\\doc\\" + fs.getFileName());
		} else if (flag == 3) {
			fs.saveToFile("D:\\Demo\\hsequa\\" + fs.getFileName());
		} else if (flag == 4) {
			fs.saveToFile("D:\\Demo\\eva\\" + fs.getFileName());
		} else if (flag == 5) {
			fs.saveToFile("D:\\Demo\\leg\\" + fs.getFileName());
		} else if (flag == 6) {
			fs.saveToFile("D:\\Demo\\plan\\" + fs.getFileName());	
		}
		fs.close();
	}

6、web-xml配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- PageOffice Begin -->
	<servlet>
		<servlet-name>poserver</servlet-name>
		<servlet-class>com.zhuozhengsoft.pageoffice.poserver.Server</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/poserver.zz</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/sealsetup.exe</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/posetup.exe</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/pageoffice.js</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/jquery.min.js</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>poserver</servlet-name>
		<url-pattern>/pobstyle.css</url-pattern>
	</servlet-mapping>
	<servlet>
		<servlet-name>adminseal</servlet-name>
		<servlet-class>com.zhuozhengsoft.pageoffice.poserver.AdminSeal</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>adminseal</servlet-name>
		<url-pattern>/adminseal.zz</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>adminseal</servlet-name>
		<url-pattern>/loginseal.zz</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>adminseal</servlet-name>
		<url-pattern>/sealimage.zz</url-pattern>
	</servlet-mapping>
	<mime-mapping>
		<extension>mht</extension>
		<mime-type>message/rfc822</mime-type>
	</mime-mapping>
	<context-param>
		<param-name>adminseal-password</param-name>
		<param-value>111111</param-value>
	</context-param>
	<!-- PageOffice End -->

7、jsp配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ page language="java"
	import="java.util.*,com.zhuozhengsoft.pageoffice.*"
	pageEncoding="UTF-8"%>
<%
	PageOfficeCtrl poCtrl = (PageOfficeCtrl) request.getAttribute("poCtrl");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>最简单的打开保存Word文件</title>
<!-- <script type="text/javascript" >
function getPageOfficeJsUrl(){var d=document.URL;var c=d.substring(0,find(d,"/",3)+1);var a=d.substring(0,find(d,"/",4)+1);var f=new Array();f[0]=c;f[1]=a;for(var b=0;b<f.length;b++){var e="pageoffice.js";ajax({url:f[b]+"/pageoffice.js",type:"GET",data:{name:"super"},dataType:"json",success:function(h,k){if(d.indexOf("?")>0){d=d.substring(0,d.indexOf("?"))}var g=countChar(d.substring(f[b].length),"/");for(var i=0;i<g;i++){e="../"+e}alert('src="'+e+'"')},fail:function(g){}})}}function countChar(d,e){var b=0;for(var a=0;a<d.length;a++){if(d.charAt(a)==e){b++}}return b}function find(e,b,c){var a=0;for(var d=0;d<c;d++){a=e.indexOf(b,a+1)}return a}getPageOfficeJsUrl();function ajax(a){a=a||{};a.type=(a.type||"GET").toUpperCase();a.dataType=a.dataType||"json";var c=formatParams(a.data);if(window.XMLHttpRequest){var b=new XMLHttpRequest()}else{var b=new ActiveXObject("Microsoft.XMLHTTP")}b.onreadystatechange=function(){if(b.readyState==4){var d=b.status;if(d>=200&&d<300){a.success&&a.success(b.responseText,b.responseXML)}else{a.fail&&a.fail(d)}}};if(a.type=="GET"){b.open("GET",a.url+"?"+c,false);b.send(null)}else{if(a.type=="POST"){b.open("POST",a.url,false);b.setRequestHeader("Content-Type","application/x-www-form-urlencoded");b.send(c)}}}function formatParams(c){var a=[];for(var b in c){a.push(encodeURIComponent(b)+"="+encodeURIComponent(c[b]))}a.push(("v="+Math.random()).replace(".",""));return a.join("&")};
</script> -->
<script type="text/javascript" src="../../../jquery.min.js"></script>
<script type="text/javascript" src="../../../pageoffice.js" id="po_js_main"></script>
</head>
<body>
	<div style="width: 100%; height: 100%;">
		<%=poCtrl.getHtmlCode("PageOfficeCtrl1")%>
	</div>
	<script type="text/javascript">
		function Save() {
			document.getElementById("PageOfficeCtrl1").WebSave();
			POBrowser.closeWindow();//关闭POBrowser窗口
		}
		function ShowPrintDlg() {
			document.getElementById("PageOfficeCtrl1").ShowDialog(4); //打印对话框
		}
		function SwitchFullScreen() {//全屏
			document.getElementById("PageOfficeCtrl1").FullScreen = !document
					.getElementById("PageOfficeCtrl1").FullScreen;
		}
	</script>
</body>
</html>

注意:有时候jsp 和他的js 不在同一个目录, 这时候在jsp页面 使用<script type=”text/javascript” > function getPageOfficeJsUrl(){var d=document.URL;var c=d.substring(0,find(d,”/”,3)+1);var a=d.substring(0,find(d,”/”,4)+1);var f=new Array();f[0]=c;f[1]=a;for(var b=0;b<f.length;b++){var e=”pageoffice.js”;ajax({url:f[b]+”/pageoffice.js”,type:”GET”,data:{name:”super”},dataType:”json”,success:function(h,k){if(d.indexOf(“?”)>0){d=d.substring(0,d.indexOf(“?”))}var g=countChar(d.substring(f[b].length),”/”);for(var i=0;i<g;i++){e=”../”+e}alert(‘src=”‘+e+'”‘)},fail:function(g){}})}}function countChar(d,e){var b=0;for(var a=0;a<d.length;a++){if(d.charAt(a)==e){b++}}return b}function find(e,b,c){var a=0;for(var d=0;d<c;d++){a=e.indexOf(b,a+1)}return a}getPageOfficeJsUrl();function ajax(a){a=a||{};a.type=(a.type||”GET”).toUpperCase();a.dataType=a.dataType||”json”;var c=formatParams(a.data);if(window.XMLHttpRequest){var b=new XMLHttpRequest()}else{var b=new ActiveXObject(“Microsoft.XMLHTTP”)}b.onreadystatechange=function(){if(b.readyState==4){var d=b.status;if(d>=200&&d<300){a.success&&a.success(b.responseText,b.responseXML)}else{a.fail&&a.fail(d)}}};if(a.type==”GET”){b.open(“GET”,a.url+”?”+c,false);b.send(null)}else{if(a.type==”POST”){b.open(“POST”,a.url,false);b.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);b.send(c)}}}function formatParams(c){var a=[];for(var b in c){a.push(encodeURIComponent(b)+”=”+encodeURIComponent(c[b]))}a.push((“v=”+Math.random()).replace(“.”,””));return a.join(“&”)}; </script>

就可以输出你本页面pageoffice.js具体位置。

这就是简单的使用更详细具体需要去官网API看看。还有一些可以参考使用的,还有一些图标对应使用。

PageOffice V4.0 标准版试用序列号:5LB6J-1JIL-XE8X-AYY44 PageOffice V4.0 专业版试用序列号:I1I92-4M46-R6B2-E15TX PageOffice V4.0 企业版试用序列号:I7TGD-71VV-FYD8-4NMYP

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135036.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月3,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HttpServletResponse
web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象、代表响应的一个 HttpServletResponse对象;
Albert_xiong
2021/06/21
5700
HttpServletResponse
大数据项目之_15_电信客服分析平台_05_数据展示+定时任务+项目总结
3.4、数据展示3.4.1、环境准备3.4.2、编写代码3.4.3、最终预览3.5、定时任务四、项目总结
黑泽君
2019/04/09
1.2K0
大数据项目之_15_电信客服分析平台_05_数据展示+定时任务+项目总结
SSM整合——简单的小项目实战[通俗易懂]
2.6 创建项目中特定的包(entity、dao、service、controller)
全栈程序员站长
2022/09/01
1.4K0
Model2的基本结构「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167927.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/20
2520
【前端开发系列】—— 别说你不会Ajax
之前一直都是用封装好的Ajax,所以一直很好奇它是如何使用和实现的。这里正好就进行一下学习,下面是Ajax的一个时间图。 设置触发条件   这里模拟一个使用场景,就是在用户登陆时,异步的对用户名以
用户1154259
2018/01/18
6570
【前端开发系列】—— 别说你不会Ajax
14. Servlet入门 - ServletContext类作为全局域对象共享数据使用
4、ServletContext 是在 web 工程部署启动的时候创建。在 web 工程停止的时候销毁。
Devops海洋的渔夫
2022/01/14
6010
14. Servlet入门 - ServletContext类作为全局域对象共享数据使用
SpringMVC上传下载
1、需要导入jar包:ant.jar、commons-fileupload.jar、connom-io.jar。当然spring jar包不可缺少的哦  我这里用的是spring+springmvc+hibernate  可以到官网上直接下载springmvcjar即可
用户7705674
2021/09/23
4980
【项目实战】服创:小微企业跨组织人才管理系统
前期由于偷懒,把赛题分析交给了文本的同学,造成了分析不到位以及有点偏题了,所幸问题不大,
sidiot
2023/08/31
2470
【项目实战】服创:小微企业跨组织人才管理系统
学习SpringMVC——从HelloWorld开始
前言:   时隔十二年,中国女排最终过关斩将,用3:1的成绩证明了自己的实力,霸气夺冠,为中国赢得了一枚意义非常的金牌。这是一次全民的狂欢,一场视听盛宴,带给我们不仅是熠熠生辉的金牌,更传递出的是一种女排精神。   每每得分的时候,总能看到球员们歇斯底里的咆哮和欢呼,因为每一分都来的太不容易。   其实码农也是如此,每每解决掉一个bug的时候,内心的舒畅和激动,好似经历了没有尽头的爬坡,几度已经快精疲力尽或是达到了精神崩溃的边缘之后,陡然迎来了下坡,这种感觉好比赛场上女将们得分后已经无法用言语来表达心情,而
JackieZheng
2018/01/16
7850
学习SpringMVC——从HelloWorld开始
审计Tomcat PUT方法任意文件写入(CVE-2017-12615)
漏洞产生原因为web.xml里将readonly设置为了false(默认为true),导致了可以通过PUT写入任意文件
Gh0st1nTheShel
2022/01/09
1.2K0
Web Service进阶(一)运行原理[通俗易懂]
利用清明小假期,温习了一遍Web Service的相关内容,对其工作原理进行了简要总结。以供有需求的朋友和自己日后参考。文章若有不当之处,敬请朋友们提出宝贵建议,以求共勉。
全栈程序员站长
2022/09/15
6110
Web Service进阶(一)运行原理[通俗易懂]
文件上传---动作条
  利用Apache commons fileupload上传文件,直接显示其完成的进度条。----示例代码源自《JAVA WEB王者归来》   1 首先要显示动作条要利用Ajax的异步请求,使得在没有完成时,不会刷新本页,而是局部的刷新。如果没有指定form的定向页面,默认是刷新本页,正常我们提交一个form刷新本页,在没有完成请求前是显示空白的网页,这里我们指定他刷新一个不显示的区域,就要用到form的属性target。 <iframe name=uploadiframe width=0 height=
用户1154259
2018/01/18
1.1K0
文件上传---动作条
_Spring MVC相关注解运用 —— 下篇
当我们访问jsp时,访问路径:http://localhost:8080/ajax-request.jsp
会洗碗的CV工程师
2023/11/18
1620
_Spring MVC相关注解运用 —— 下篇
jsp 内置对象 登录 cookie + session
概述 一共两个页面 当直接访问产品列表的时候,会判断用户是否登录,如果用户没有登录,则直接3秒跳转. 如果用户登录,则不进行跳转 登录页面:对于登录页面来说,直接输入用户名,密码.和数据库进行对比,进行登录. 并进行密码的本地保存 ps 一般是需要对密码加密进行本地保存的代码如下 配置文件 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/w
mySoul
2019/03/15
1.7K0
Java Web Servlet (Part B)- ServletConfig &amp; ServletContext
ServletConfig类时Servlet程序的配置信息类,使用Servlet可以实现
RiemannHypothesis
2022/09/26
3660
Java Web Servlet (Part B)- ServletConfig &amp; ServletContext
Java Web 网络留言板8
  admin:id,name ,password                  <pk>id
Hongten
2018/09/13
1.9K0
Web---演示Servlet的相关类、下载技术、线程问题、自定义404页面
Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数。 ServletContext – 代表整个Web项目。 ServletRequest – 代表用户的请求。 ServletResponse – 代表用户的响应。 HttpSession – 代表用户的一次会话。 本篇博客演示:ServletConfig类 和 ServletContext 类(网页点击量统计,留言板和图片下载技术(其他类型文件类似))
谙忆
2021/01/21
7280
Web---演示Servlet的相关类、下载技术、线程问题、自定义404页面
SpringMVC的笔记
使用Spring MVC,配置DispatcherServlet是第一步。 DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet。 DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。 注:“某某规则”是根据你使用了哪个HandlerMapping接口的实现类的不同而不同。 栗子:使用默认配置文件名
包子388321
2020/06/16
1.1K0
Red5搭建直播平台
3,在该页面点击installer,进入安装页面。或输入http://localhost:5080/installer/
全栈程序员站长
2022/08/04
1.7K0
Web---文件上传-用apache的工具处理、打散目录、简单文件上传进度
在这个上传中,我们并没有把uuid和文件名联系起来,这样是不好的,必须用数据库把uuid和其对应的文件名存起来。以后下载的时候还给客户端一样的名字,而不是给他uuid的名字。
谙忆
2021/01/21
1.1K0
Web---文件上传-用apache的工具处理、打散目录、简单文件上传进度
推荐阅读
相关推荐
HttpServletResponse
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验