pageoffice 在线打开 word 文件后,实现文档和数据的单独保存

PageOffice的保存机制是先保存数据,再保存文件,所以点击一次保存按钮可以同时实现数据和文件的保存。但是会有这样的需求:单独的保存文件或者保存数据。下面演示一下具体的实现过程。 

一、核心代码

poCtrl.setSaveDataPage("SaveData.jsp");//设置保存数据的页面
poCtrl.setSaveFilePage("SaveFile.jsp");//设置保存文件的页面

SaveFilePage和SaveDataPage的区别: 

SaveFilePage:指定的页面可接受二进制文件流、Form域,直接保存修改后的文件。

SaveDataPage:指定的页面可接收页面提交的Word数据区域、Excel表格数据、Form域。

 

SaveFilePage:指定的页面只能创建FileServer对象。

SaveDataPage:指定的页面只能创建PageOffice.ExcelReader或PageOffice.WordReader命名空间下的对象。 

 

 

SaveFilePage的使用:只需要保存修改后的文档,而不需要提取文档内容时。

SaveDataPage的使用:需要提交文档内容或用户输入的文档内容时。

二、具体实现

1.官网http://www.zhuozhengsoft.com/dowm/下载集成文件,引入jar包,配置web.xml

2.在父页面index.jsp(需要打开文档的页面)放一个a标签或者button 写a标签之前先引入pageoffice需要的js文件(js文件的路径是项目的根目录下)

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

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

然后添加a标签 

<a href="javascript:POBrowser.openWindowModeless('Word.jsp' , 'width=1200px;height=800px;');">打开文件</a>

为什么要使用pobrowser方法,请参考https://my.oschina.net/u/3507515/blog/3112495

3.在父页面同级目录下创建一个名为Word.jsp的文件

(1)在Word.jsp 页面写一个input 隐藏域,作为判断保存文件或者保存数据的标志 

(2)点击保存的时候,给隐藏域赋值对应的值,例如:          当隐藏域的值为true时,保存文件。          当隐藏域的值为false时,保存数据。 

(3)在Word.jsp 同级目录下创建一个名为test.doc的文件  在文件中添加两个数据区域(书签),分别为PO_userName,PO_deptName

<%@ page language="java"
    import="java.util.*,com.zhuozhengsoft.pageoffice.*,com.zhuozhengsoft.pageoffice.wordwriter.*,java.awt.*"
    pageEncoding="utf-8"%>
<%
    PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
    //设置服务器页面
    poCtrl.setServerPage(request.getContextPath()+"/poserver.zz");

    WordDocument wordDoc = new WordDocument();
    //打开数据区域,openDataRegion方法的参数代表Word文档中的书签名称
    DataRegion dataRegion1 = wordDoc.openDataRegion("PO_userName");
    //设置DataRegion的可编辑性
    dataRegion1.setEditing(true);
    DataRegion dataRegion2 = wordDoc.openDataRegion("PO_deptName");
        dataRegion2.setEditing(true);
    poCtrl.setWriter(wordDoc);

    //添加自定义按钮
    poCtrl.addCustomToolButton("保存文件", "SaveFile", 1);
    poCtrl.addCustomToolButton("保存数据", "SaveData", 1);
    //设置保存数据的页面
    poCtrl.setSaveDataPage("SaveData.jsp");
    //设置保存文档的页面
    poCtrl.setSaveFilePage("SaveFile.jsp");
    //打开Word文档,当需要保存数据时,OpenModeType必须是docSubmitForm模式。
    poCtrl.webOpen("doc/test.doc", OpenModeType.docSubmitForm, "张佚名");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title></title>
        <script type="text/javascript">
            function SaveFile() {
                document.getElementById("flag").value="true";
                document.getElementById("PageOfficeCtrl1").WebSave();
            }
            function SaveData() {
                document.getElementById("flag").value="false";
                document.getElementById("PageOfficeCtrl1").WebSave();
            }
        </script>
        
    </head>
    <body>
        <form id="form1">
            <div>
                <input id="flag" name="flag" type="hidden" />
            </div>
            <div style="width: auto; height: 700px;">
             <%=poCtrl.getHtmlCode("PageOfficeCtrl1")%>
            </div>
        </form>
    </body>
</html>

保存文件的代码

FileSaver fs=new FileSaver(request,response);
if ("true".equals(fs.getFormField("flag"))){
    fs.saveToFile(request.getSession().getServletContext().getRealPath("SaveDataAndFile/doc/")+"/"+fs.getFileName());
}else{
    System.out.println("保存数据");
}
fs.close();

保存数据的代码

WordDocument doc = new WordDocument(request, response);
if ("false".equals(doc.getFormField("flag"))){
    //获取提交的数值
   String dataUserName = doc.openDataRegion("PO_userName").getValue();
   String dataDeptName = doc.openDataRegion("PO_deptName").getValue();
   String companyName= doc.getFormField("txtCompany");
}
else{
   System.out.println("保存文件");
}
  doc.close();

启动项目直接访问.此时会提示安装插件,点击安装成功后提示注册,填写相关信息,填写注册码    I7TGD-71VV-FYD8-4NMYP   就可以打开文档.

最终的实现效果

点击保存的时候会出现两次保存的进度条。

点击保存文件,控制台会打印保存文件。

点击保存数据,控制台会打印保存数据。

刚开始接触pageoffice的话,也可以看视频快速上手http://www.zhuozhengsoft.com/Technical/

posted @ 2019-10-15 08:58  ziwuxian  阅读(738)  评论(0)    收藏  举报