最近需要项目用到在线打开word和excel文档处理,在PageOffice官网下载了文档研究了下:官网地址:http://www.zhuozhengsoft.com/
不多说,直接写上学习过程,请大家指正。练习过程整合了Struts进行练习,其他框架可以结合具体业务添加:
在使用之前有几点要注意:
1、在本机上安装posetup.exe,如果用到印章还要安装sealsetup.exe.
2、这个在最新版本的chrome中不能直接打开,通过link方式才行,没弄过,可以看一下。刚开始我就遇到这种问题,IE、firefox可以,还有就是版本问题
3、系统会自动检测本机上有的office软件,自动检测第一次安装的office软件(避免同时有WPS和MSOffice)。
4、pageOffice是收费的,可以试用,为避免在页面中总是输入注册,可离线生成license.lic,copy到lib下,方便开发。
5、。。。。。。。
环境:eclipse3.7+jdk6+tomcat7
第一步:新建一个web工程:
工程目录如下:
注:doc 目录下问为文档模板或pdf文件等,可自动生成带有印章的公司文档(如请假条,在线填写姓名、事由等,生成文档,再由领导同意,生成一份完整请假条)。
第二步:在web.xml中添加官网给出的配置:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>pageOfficeDemo</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <!-- 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>/poserver.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>poserver</servlet-name> <url-pattern>/pageoffice.cab</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>poserver</servlet-name> <url-pattern>/popdf.cab</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> <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.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>adminseal</servlet-name> <url-pattern>/loginseal.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>adminseal</servlet-name> <url-pattern>/sealimage.do</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> <!-- 连接数据库信息配置--> <context-param> <param-name>adminseal-charset</param-name> <param-value>UTF-8</param-value> </context-param> <context-param> <param-name>posealdb-driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </context-param> <context-param> <param-name>posealdb-url</param-name> <param-value>jdbc:mysql://localhost:3306/pageoffice</param-value> </context-param> <context-param> <param-name>posealdb-username</param-name> <param-value>root</param-value> </context-param> <context-param> <param-name>posealdb-password</param-name> <param-value>root</param-value> </context-param> <!-- PageOffice End --> </web-app>
Struts.xml:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="demo" extends="struts-default"> <action name="createWord" class="com.demo.action.WordDemo" method="create"> <result name="create">/createWord.jsp</result> </action> <action name="autoInsert" class="com.demo.action.WordDemo" method="autoInsert"> <result name="autoInsert">/autoInsert.jsp</result> </action> <action name="openword" class="com.demo.action.WordDemo" method="openword"> <result name="openword">/editword.jsp</result> </action> <action name="openPDF" class="com.demo.action.WordDemo" method="openPDF"> <result name="pdf">/openPDF.jsp</result> </action> <action name="wordToPDF" class="com.demo.action.WordDemo" method="wordToPDF"> <result name="wordToPDF">/wordToPDF.jsp</result> </action> <action name="saveword" class="com.demo.action.WordDemo" method="saveword"> <result name="saveword">/savefile.jsp</result> </action> <action name="openexcel" class="com.demo.action.ExcelDemo" method="openexcel"> <result name="openexcel">/editexcel.jsp</result> </action> <action name="saveexcel" class="com.demo.action.ExcelDemo" method="saveexcel"> <result name="saveexcel">/savefile.jsp</result> </action> </package> </struts>
WordDemo:
package com.demo.action; import java.awt.Color; import java.util.Random; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.ServletResponseAware; import com.opensymphony.xwork2.ActionSupport; import com.zhuozhengsoft.pageoffice.BorderStyleType; import com.zhuozhengsoft.pageoffice.DocumentOpenType; import com.zhuozhengsoft.pageoffice.DocumentVersion; import com.zhuozhengsoft.pageoffice.FileMakerCtrl; import com.zhuozhengsoft.pageoffice.FileSaver; import com.zhuozhengsoft.pageoffice.OpenModeType; import com.zhuozhengsoft.pageoffice.PDFCtrl; import com.zhuozhengsoft.pageoffice.PageOfficeCtrl; import com.zhuozhengsoft.pageoffice.ThemeType; import com.zhuozhengsoft.pageoffice.wordwriter.WordDocument; public class WordDemo extends ActionSupport implements ServletRequestAware, ServletResponseAware { private static final long serialVersionUID = -758686623642845302L; private HttpServletRequest request; private HttpServletResponse response; private String message = ""; private String title; public String getTitle() { return title; } public void setTitle(String title) { System.out.println(title); this.title = title; } public void setServletRequest(HttpServletRequest request) { this.request = request; } public void setServletResponse(HttpServletResponse response) { this.response = response; } public String getMessage() { return message; } public String create() throws Exception { PageOfficeCtrl poCtrl1 = new PageOfficeCtrl( ServletActionContext.getRequest()); System.out.println("create执行到此---------》" + poCtrl1); poCtrl1.setServerPage(request.getContextPath() + "/poserver.zz"); // 此行必须 // 隐藏菜单栏 poCtrl1.setMenubar(true); // 设置Office办公软件类型 // poCtrl1.setOfficeVendor(OfficeVendorType.WPSOffice); poCtrl1.addCustomToolButton("保存", "SaveDocument()", 1); // 隐藏工具栏 poCtrl1.setCustomToolbar(true); // 设置边框颜色 poCtrl1.setBorderColor(Color.blue); // 设置边框样式 poCtrl1.setBorderStyle(BorderStyleType.BorderThin); // 设置标题栏文字 poCtrl1.setCaption("创建一个文档"); // 保存前的检查 // poCtrl1.setJsFunction_BeforeDocumentSaved("BeforeDocumentSaved()"); // 设置保存页面 poCtrl1.setSaveFilePage("saveword.action"); // 新建Word文件,webCreateNew方法中的两个参数分别指代“操作人”和“新建Word文档的版本号” poCtrl1.webCreateNew("vivid", DocumentVersion.Word2007); poCtrl1.setTagId("PageOfficeCtrl1"); // 此行必须 return "create"; } /** * 在线打开一个PDF */ public String openPDF() throws Exception { PDFCtrl pdf = new PDFCtrl(ServletActionContext.getRequest()); pdf.setServerPage(request.getContextPath() + "/poserver.zz"); System.out.println(request.getContextPath()); // 设置界面样式 pdf.setBorderColor(Color.RED); pdf.setCaption("创建一个PDF"); pdf.setBorderStyle(BorderStyleType.BorderFlat); pdf.setTheme(ThemeType.Office2010); //设置菜单选项 pdf.addCustomToolButton("打印", "Print()", 6); pdf.addCustomToolButton("隐藏/显示书签", "SetBookmarks()", 0); pdf.addCustomToolButton("-", "", 0); //搜索设置 pdf.addCustomToolButton("搜索", "SearchText()", 0); pdf.addCustomToolButton("搜索下一个", "SearchTextNext()", 0); pdf.addCustomToolButton("搜索上一个", "SearchTextPrev()", 0); pdf.addCustomToolButton("实际大小", "SetPageReal()", 16); pdf.addCustomToolButton("适合页面", "SetPageFit()", 17); pdf.addCustomToolButton("适合宽度", "SetPageWidth()", 18); pdf.addCustomToolButton("-", "", 0); pdf.addCustomToolButton("首页", "FirstPage()", 8); pdf.addCustomToolButton("上一页", "PreviousPage()", 9); pdf.addCustomToolButton("下一页", "NextPage()", 10); pdf.addCustomToolButton("尾页", "LastPage()", 11); pdf.addCustomToolButton("-", "", 0); // // 关闭菜单 // pdf.setMenubar(false); // 打开PDF文档 pdf.webOpen("doc/test.pdf"); pdf.setTagId("PDFCtrl1"); return "pdf"; } /** * 将文档转为pdf */ public String wordToPDF() throws Exception{ FileMakerCtrl fmCtrl = new FileMakerCtrl(request); fmCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); WordDocument doc = new WordDocument(); //禁用右击事件 doc.setDisableWindowRightClick(true); //给数据区域赋值,即把数据填充到模板中相应的位置 doc.openDataRegion("PO_company").setValue("北京卓正志远软件有限公司 "); fmCtrl.setSaveFilePage("saveword.action"); fmCtrl.setWriter(doc); fmCtrl.setJsFunction_OnProgressComplete("OnProgressComplete()"); fmCtrl.fillDocumentAsPDF("doc/template.doc", DocumentOpenType.Word, "a.pdf"); fmCtrl.setTagId("FileMakerCtrl1"); //此行必须 return "wordToPDF"; } /** * * @Title: autoInsert * @Description: 自动添加到文档中 * @author vivid * @time 2016-3-24 下午4:38:38 * @return * @throws Exception */ public String autoInsert() throws Exception { // 1、初始化实例 FileMakerCtrl fmCtrl = new FileMakerCtrl( ServletActionContext.getRequest()); fmCtrl.setServerPage(request.getContextPath() + "/poserver.zz"); System.out.println(request.getContextPath()); // 生成随机id String id = String.valueOf(new Random().nextInt(100)); System.out.println(id); // String id = "2"; request.setAttribute("id", id); System.out.println(title); if (id != null && id.length() > 0) { // WordDocument 类代表一个Word文档,用来读取用户输入到Word文档中的数据 WordDocument doc = new WordDocument(); // 禁用右击事件 doc.setDisableWindowRightClick(true); // 给数据区域赋值,即把数据填充到模板中相应的位置 doc.openDataRegion("PO_company").setValue(title); // doc.openDataRegion("po_second").setValue("mftcc" + id); // 设置 saveMaker.jsp 用来保存文档。 fmCtrl.setSaveFilePage("saveMaker.jsp?id=" + id); fmCtrl.setWriter(doc); fmCtrl.setJsFunction_OnProgressComplete("OnProgressComplete()"); fmCtrl.setFileTitle("文档" + id + ".doc"); fmCtrl.fillDocument("doc/template.doc", DocumentOpenType.Word); } fmCtrl.setTagId("FileMakerCtrl1"); // 此行必须 return "autoInsert"; } /* * 打开文档并修改保存 */ public String openword() throws Exception { PageOfficeCtrl poCtrl1 = new PageOfficeCtrl( ServletActionContext.getRequest()); poCtrl1.setServerPage("poserver.zz"); // 此行必须 // 设置标题 poCtrl1.setCaption("打开文档操作"); // 创建工具条 poCtrl1.addCustomToolButton("保存", "SaveDocument()", 1); poCtrl1.addCustomToolButton("-", "", 0); poCtrl1.addCustomToolButton("打印", "ShowPrintDlg()", 6); poCtrl1.addCustomToolButton("-", "", 0); poCtrl1.addCustomToolButton("全屏切换", "SetFullScreen()", 4); poCtrl1.addCustomToolButton("-", "", 0); poCtrl1.addCustomToolButton("加盖印章", "AddSeal()", 5); poCtrl1.addCustomToolButton("手写签批", "AddHandSign()", 5); poCtrl1.addCustomToolButton("验证印章", "VerifySeal()", 5); poCtrl1.setSaveFilePage("saveword.action"); poCtrl1.webOpen("doc/test.doc", OpenModeType.docNormalEdit, "张三"); poCtrl1.setTagId("PageOfficeCtrl1"); // 此行必须 return "openword"; } /* * 文档保存操作 */ public String saveword() throws Exception { FileSaver fs = new FileSaver(request, response); request.setAttribute("FileSaver", fs); fs.saveToFile(request.getSession().getServletContext() .getRealPath("doc/") + "/" + fs.getFileName()); // fs.saveToFile(request.getContextPath()+"/doc/"+fs.getFileName()); System.out.println(request.getSession().getServletContext() .getRealPath("doc/")); System.out.println(fs.getFileName()); fs.showPage(200, 400); message = "保存成功!"; return "saveword"; } }ExcelDemo:
package com.demo.action; import java.awt.Color; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.ServletResponseAware; import com.opensymphony.xwork2.ActionSupport; import com.zhuozhengsoft.pageoffice.BorderStyleType; import com.zhuozhengsoft.pageoffice.FileSaver; import com.zhuozhengsoft.pageoffice.OpenModeType; import com.zhuozhengsoft.pageoffice.PageOfficeCtrl; import com.zhuozhengsoft.pageoffice.excelwriter.Cell; import com.zhuozhengsoft.pageoffice.excelwriter.Sheet; import com.zhuozhengsoft.pageoffice.excelwriter.Workbook; /** * * @ClassName: ExcelDemo * @Description: TODO * @author vivid * @date 2016-3-24 下午1:22:55 * */ @SuppressWarnings("serial") public class ExcelDemo extends ActionSupport implements ServletRequestAware, ServletResponseAware { private HttpServletRequest request; private HttpServletResponse response; private String message = ""; public void setServletRequest(HttpServletRequest request) { this.request = request; } public void setServletResponse(HttpServletResponse response) { this.response = response; } public String getMessage() { return message; } // 此处只简单的实现了Excel文件的在线编辑和保存, // 动态填充单元格、提交单元格等其他功能的实现请参考通过JSP编写的示例 public String openexcel() throws Exception { PageOfficeCtrl poCtrl1 = new PageOfficeCtrl( ServletActionContext.getRequest()); poCtrl1.setServerPage("poserver.do"); // 此行必须 poCtrl1.setCaption("操作Excel文档"); //设置边框的类型 poCtrl1.setBorderStyle(BorderStyleType.BorderThin); //设置边框的颜色 poCtrl1.setBorderColor(Color.blue); // 代表一个Excel文档,用来读取用户输入到Excel表格中的数据,填充Excel表格 Workbook workbook = new Workbook(); // 参数为要打开的Excel文件中的Sheet表单的名称 Sheet sheet = workbook.openSheet("Sheet1"); // 获取sheet名称 String name = sheet.getName(); System.out.println("--------" + name); // 打开指定的单元格(“B4”单元格),并返回 Cell 对象 Cell B4 = sheet.openCell("B4"); // 给单元格赋值 B4.setValue("B产品"); // 设置单元格前景色 B4.setForeColor(Color.green); // 打开指定的表格,并返回 Table 对象 // Table XXX =sheet.openTable("XXX"); // 提交单元格数据 // B4.setSubmitName("pname"); poCtrl1.setWriter(workbook); // 工具栏 poCtrl1.addCustomToolButton("保存", "SaveDocument()", 1); poCtrl1.addCustomToolButton("-", "", 0); poCtrl1.addCustomToolButton("打印", "ShowPrintDlg()", 6); poCtrl1.addCustomToolButton("-", "", 0); poCtrl1.addCustomToolButton("全屏切换", "SetFullScreen()", 4); poCtrl1.addCustomToolButton("-", "", 0); poCtrl1.addCustomToolButton("加盖印章", "AddSeal()", 5); poCtrl1.addCustomToolButton("手写签批", "AddHandSign()", 5); poCtrl1.addCustomToolButton("验证印章", "VerifySeal()", 5); // 设置保存页 poCtrl1.setSaveFilePage("saveexcel.action"); // 打开文件 poCtrl1.webOpen("doc/test.xls", OpenModeType.xlsNormalEdit, "张三"); poCtrl1.setTagId("PageOfficeCtrl1"); // 此行必须 return "openexcel"; } public String saveexcel() throws Exception { FileSaver fs = new FileSaver(request, response); request.setAttribute("FileSaver", fs); // 将修改的Excel文件保存到相应的路径下 fs.saveToFile(request.getSession().getServletContext() .getRealPath("doc/") + "/" + fs.getFileName()); // 弹出窗口显示保存结果 // fs.showPage(300, 300); // message = "显示自定义保存结果。"; // 设置保存结果信息 fs.setCustomSaveResult("success"); return "saveexcel"; } }
首页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%>"> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <title>pageOfficeDemo</title> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <script type="text/javascript"> </script> <body> <div style="text-align:center;"> <b>PageOfficeDemo</b><br> <br> <a href="createWord.action" style="font:blue">1、在线创建一个word文档</font></a><br/><br/> <a href="openword.action " style="font:blue"> 2、在线编辑保存Word文档</font></a> <br/><br/> <a href="href.jsp" style="font:blue">3、在线替换word文档内容</font></a> <br/><br/> <a href="openexcel.action" style="font:blue">4、在线编辑保存Excel文档</font></a> <br/><br/> <a href="openPDF.action" style="font:blue">5、在线打开PDF文档</font></a> <br/><br/> <a href="wordToPDF.action" style="font:blue">6、word插入数据后保存为PDF</font></a> <br/><br/> </div> </body> </html>
生成word文档:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.pageoffice.cn" prefix="po"%> <!-- 必须 --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <!--************** 卓正 PageOffice 客户端代码开始 ************************--> <script language="javascript" type="text/javascript"> function SaveDocument() { var title = document.getElementById("title").value; alert(title); if (title != null) { document.getElementById("PageOfficeCtrl1").WebSave(); } else { alert("请输入要保存的文件名!!"); } //alert(document.getElementById("PageOfficeCtrl1").CustomSaveResult); } </script> <div style="width: 100%; height: 800px"> <po:PageOfficeCtrl id="PageOfficeCtrl1" /> </div> </body> </html>
运行截图:
源码下载地址:http://download.csdn.net/detail/erris/9474348