pageoffice是一款网页集成word.excel...等office工具
并不免费,但可以试用练习
SSM框架搭建过程就省略了
注意:由于谷歌/火狐升级,不支持插件嵌入,建议使用POBrowser.openWindowModeless 的方法启动pageoffice.

效果图:

 
image.png

1.使用前准备

  1. postup.exe安装

     
    image.png
  2. 导入jar包:pageoffice.jar

     
    image.png

    理论上不需要印章功能下面两个不需要导入,我只用到了第一个jar包,用于导出word文档在线编辑并保存.

  3. 再web.xml中添加下面代码:

  <!-- 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 -->

这里修改成您的印章简易管理页的管理员登录密码,为了安全,强烈建议修改!!!

如果您用的是默认的Access数据库,下面节点不用修改,继续保持被注释状态或直接删除。 如果您用的是Oracle、MySQL等其他数据库,请将下面节点的注释去掉,并且修改成您的印章数据库连接参数。最好把WEB-INF\lib下的seal.mdb也删除掉。

<context-param>
<param-name>posealdb-driver</param-name>
<param-value>oracle.jdbc.driver.OracleDriver</param-value>
</context-param>
<context-param>
<param-name>posealdb-url</param-name>
<param-value>jdbc:oracle:thin:@192.168.0.1:1521:orcl</param-value>
</context-param>
<context-param>
<param-name>posealdb-username</param-name>
<param-value>system</param-value>
</context-param>
<context-param>
<param-name>posealdb-password</param-name>
<param-value>111111</param-value>
</context-param>

2.使用方法

1.再webapp下建一个文件夹doc,存储word文件

 
image.png

2.调用pageoffice需要在jsp中加入下面代码:

<script type="text/javascript" src=" jquery.min.js"></script>
<script type="text/javascript" src=" pageoffice.js" id="po_js_main"></script>

注意:由于再 准备3 中已经再web.xml中配置了pageoffice.js和jquery.min.js,所以此处无需将js文件放入webapp目录下

 
image.png

3.index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">< <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page"> <!--PageOffice.js和jquery.min.js文件一定要引用-->
<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="text-align:center;">
<b>在线编辑</b><br>
<a href="javascript:POBrowser.openWindowModeless('openword' , 'width=1200px;height=800px;');">word测试</a><br>
</div>
</body>
</html>

4.word.jsp

<%@ 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>
</head>
<body>
<script type="text/javascript">
function Save() {
document.getElementById("PageOfficeCtrl1").WebSave();
window.external.close();//关闭POBrowser窗口
}
</script>
<div style="width:100%; height:100%;">
<%=poCtrl.getHtmlCode("PageOfficeCtrl1")%>
</div>
</body>
</html>

5.Controller

@RequestMapping("openword")
public String openword(HttpServletRequest request, HttpServletResponse response){
PageOfficeCtrl poCtrl=new PageOfficeCtrl(request);
//动态替换模版内容
WordDocument doc=new WordDocument();
doc.openDataRegion("Incubator").setValue("测试修改");//文档书签替换Incubator标签 request.setAttribute("poCtrl", poCtrl); //设置服务页面
poCtrl.setServerPage(request.getContextPath()+"/poserver.zz");
//添加保存按钮
poCtrl.addCustomToolButton("保存并关闭","Save",1);
//设置保存的action
poCtrl.setSaveFilePage("savefile");
//打开word
poCtrl.setWriter(doc);//将替换的标签注入文档中
poCtrl.webOpen("doc/test.doc",OpenModeType.docAdmin,"张三");
poCtrl.setTagId("PageOfficeCtrl1"); //此行必须 return "Word";
} //文件保存
@RequestMapping("savefile")
public void savefile(HttpServletRequest request, HttpServletResponse response){
FileSaver fs = new FileSaver(request, response);
fs.saveToFile(request.getSession().getServletContext().getRealPath("doc/") + "/" + fs.getFileName());
fs.close();
}

完成.

3.设置书签(区域动态填充数据)

此功能为企业版或专业版功能,需要用专业版测试注册号注册

1.添加书签(即区域)

WordDocument doc=new WordDocument();
//createDataRegion(区域名称,区域位置方位,位置)
DataRegion dg1=doc.createDataRegion("PO_first", DataRegionInsertType.After , "[home]");
//设置编辑属性
dg1.setEditing(true);

注意:书签命名规则未"PO_",后面设置值的时候直接使用""PO_""后的字段即可.
首次添加书签,可以使用"[home]"或"[end]"表明区域位置.

 
image.png

2.区域内数据动态填充

WordDocument doc=new WordDocument();
//打开区域设置值
doc.openDataRegion("first").setValue("测试填充数据");
 
image.png

4.问题总结

1.无意间修改了路径,导致保存失败

savefile.doc不存在问题

原因:保存路径与文件打开路径不一致
解决方案:在Controller中的savefile中修改fs.saveToFile(path)中的path路径,使其与word打开路径一致即可.

 
image.png

2.空指针异常
缺失代码:
非常重要,一定要加上,是控件的灵魂

request.setAttribute("poCtrl", poCtrl);

作者:XuJiaxin_
链接:https://www.jianshu.com/p/4a16355901e5
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

pageoffice实现网页打开编辑保存word文档(基于SSM框架)的更多相关文章

  1. [转载]Java开发在线打开编辑保存Word文件

    Java调用logo是“P”图标的第三方插件,实现在线编辑保存Word文件(以jsp调用为例,支持SSM.SSH.SpringMVC等流行框架) 工具/原料   Eclipse或MyEclipse等j ...

  2. [原创]Java开发在线打开编辑保存Word文件(支持多浏览器)

    Java调用PageOffice实现在线编辑保存Word文件(以jsp调用为例,支持SSM.SSH.SpringMVC等流行框架) 1. 下载PageOffice开发包:http://www.zhuo ...

  3. 内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 [问题点数:20分,结帖人wenyang2004]

    在环境里是没有问题的 就是发布网站后,会出现“/”应用程序中的服务器错误.--------------------------------------------------------------- ...

  4. 打开和写入word文档

    一. 使用win32读取word内容 # -*- coding: utf-8 -*- from win32com import client as wc def readDocx2(): word = ...

  5. 解决dede编辑器不能保存word文档样式问题

    ckeditor在dede里不能保存样式,试过多种解决办法都还是没有解决.最终将编辑器换成FCK得到解决. 第一步:下载FCK编辑器 下载地址: 链接: http://pan.baidu.com/s/ ...

  6. [原创]java对word文档的在线打开

    一.材料准备 百度一下:PageOffice,从官网下载PageOffice for Java.压缩包文件: 二. 实现步骤: 1. 打开“集成文件”目录,拷贝“WEB-INF\lib”目录中的pag ...

  7. 打开word文档总是自动弹出控件工具条的解决办法:

    打开word文档总是自动弹出控件工具条的解决办法:1.查看是否word文档和模板中了'apmp宏病毒,按ALT+F11组合键,双击当前文档下属的ThisDocument,清空里面的内容:双击Norma ...

  8. FreeMarker生成Word文档

    FreeMarker简介: FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具,它不是面向最终用户的,而是一个 ...

  9. C# 中使用Word文档对图像进行操作

    C# 中使用Word文档对图像进行操作 Download Files: ImageOperationsInWord.zip 简介 在这篇文章中我们可以学到在C#程序中使用一个Word文档对图像的各种操 ...

随机推荐

  1. 箭头函数与定时器的this指向问题

    函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. 箭头函数本身没有this,this继承上级的this. 定时器中箭头函数的this指向包含定时器的函数,所以定时器中的箭头函数要 ...

  2. Vue入门(三)——模拟网络请求加载本地数据

    1.首先我们需要在webpack.dev.conf.js中const PORT = process.env.PORT && Number(process.env.PORT) 的后面追加 ...

  3. sql server 安装

    第一次安装sql server是2016版本,因为[win7-64版系统配置比较低],所以不成功. 第二次安装2012版,在[数据库引擎配置]的时候,选择的是[添加当前用户],以及后续需要添加用户的时 ...

  4. Codeforces Round #589 (Div. 2) B. Filling the Grid

    链接: https://codeforces.com/contest/1228/problem/B 题意: Suppose there is a h×w grid consisting of empt ...

  5. [Docker] Run a command inside Docker container

    For example you are working in a backend project, you have setup Dockerfile: FROM node:10.16.0-stret ...

  6. 报错Too many connections

    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establish ...

  7. CSS测试题Ⅰ

    1.CSS 指的是? A.  Computer Style Sheets B.  Cascading Style Sheets C.  Creative Style Sheets D.  Colorf ...

  8. [转]vue解决刷新页面vuex数据、params参数消失的问题

    一般项目都会有一些逻辑需要传递值给另一个页面,那么有的时候就会出现一个问题:用户刷新了页面,诶?数据没了,参数错误.那么今天经过总结,解决了这个问题.我在最新的项目中,通过了一下几种情况进行传值: 1 ...

  9. Centos创建用户并授权

    创建新用户 [root@VM ~]# adduser it为这个用户初始化密码,linux会判断密码复杂度,不过可以强行忽略:[root@VM_~]# passwd itChanging passwo ...

  10. Web自动化简介

    在迭代中时,先写出粗略的自动化测试用例,不是非常精准的一些提示,等到项目上线后,提示文案已经确定,再完善用例,使之成为一个完整的自动化测试工程. 用excel管理测试数据,读取效率比较低,需要读取.数 ...