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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Model2的基本结构「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167927.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/20
2520
_Spring MVC相关注解运用 —— 下篇
当我们访问jsp时,访问路径:http://localhost:8080/ajax-request.jsp
会洗碗的CV工程师
2023/11/18
1620
_Spring MVC相关注解运用 —— 下篇
【Tomcat】:深入理解 <url-pattern>
Upon receipt of a client request, the Web container determines the Web application to which to forward it. The Web application selected must have the longest context path that matches the start of the request URL.The matched part of the URL is the context path when mapping to servlets.
WEBJ2EE
2020/12/16
6580
【Tomcat】:深入理解 <url-pattern>
JAVAWeb 浅学笔记
有IDEA,有Tomcat(去网上找一下tomcat官方网站,下载9版本的即可,10版本的可能因为与IDEA版本不适而发生各种报错),有Maven,Idea虽然自带有Maven,但其功能还是有些受限,最好还是去官网下载一下Maven到本地而后导入到IDEA中
用户9691112
2023/05/18
4030
JAVAWeb 浅学笔记
【项目实战】服创:小微企业跨组织人才管理系统
前期由于偷懒,把赛题分析交给了文本的同学,造成了分析不到位以及有点偏题了,所幸问题不大,
sidiot
2023/08/31
2450
【项目实战】服创:小微企业跨组织人才管理系统
SSM第八讲 SpringMVC高级特性
昨天我们将SpringMVC拦截后缀设置为*.form代表SpringMVC会拦截*.form结尾的后缀
易兮科技
2020/09/27
3K0
SSM第八讲  SpringMVC高级特性
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
7270
Web---演示Servlet的相关类、下载技术、线程问题、自定义404页面
spring+hibernate+JQuery开发_电子相册_源码
=============================================================
Hongten
2018/09/13
4.9K0
spring+hibernate+JQuery开发_电子相册_源码
JSP(4)----servlet编程3
由Servlet容器管理的对象,过滤器的功能是在原数据和目的数据之间起过滤作用的中间组件。
py3study
2020/01/14
7120
使用wangEditor批量上传并且保证图片顺序
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100784.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/30
1.3K0
SpringMVC的笔记
使用Spring MVC,配置DispatcherServlet是第一步。 DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet。 DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。 注:“某某规则”是根据你使用了哪个HandlerMapping接口的实现类的不同而不同。 栗子:使用默认配置文件名
包子388321
2020/06/16
1.1K0
审计Tomcat PUT方法任意文件写入(CVE-2017-12615)
漏洞产生原因为web.xml里将readonly设置为了false(默认为true),导致了可以通过PUT写入任意文件
Gh0st1nTheShel
2022/01/09
1.2K0
Red5搭建直播平台
3,在该页面点击installer,进入安装页面。或输入http://localhost:5080/installer/
全栈程序员站长
2022/08/04
1.7K0
HttpServletResponse
web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象、代表响应的一个 HttpServletResponse对象;
Albert_xiong
2021/06/21
5700
HttpServletResponse
Web---文件上传-用apache的工具处理、打散目录、简单文件上传进度
在这个上传中,我们并没有把uuid和文件名联系起来,这样是不好的,必须用数据库把uuid和其对应的文件名存起来。以后下载的时候还给客户端一样的名字,而不是给他uuid的名字。
谙忆
2021/01/21
1.1K0
Web---文件上传-用apache的工具处理、打散目录、简单文件上传进度
Java Web Servlet (Part B)- ServletConfig &amp; ServletContext
ServletConfig类时Servlet程序的配置信息类,使用Servlet可以实现
RiemannHypothesis
2022/09/26
3630
Java Web Servlet (Part B)- ServletConfig &amp; ServletContext
大数据项目之_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
Java Web之SpringMVC 上传文件
根据之前所说,学习一款MVC框架,必须要知道文件怎么上传的,那么今天就来学习一下,SpringMVC是如何进行文件上传的,需要进行哪些配置,代码是如何编写的。 首先是web.xml的配置 <?xml
YungFan
2018/05/03
1.5K0
相关推荐
Model2的基本结构「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档