1:需求
用户在线编辑完word 文档后希望保存整篇文档, 同时把保存文档中指定位置的数据
2:方案
用 pageoffice 实现既保存Word文档中指定位置的数据,又保存整篇文档
4:核心思想及代码
(1)既然要保存数据,那么就要用文档的提交模式打开文档
//打开Word文档,当需要同时保存数据和保存文档时,OpenModeType必须是docSubmitForm模式。
poCtrl.webOpen("doc/test.doc", OpenModeType.docSubmitForm, "张佚名");
(2)必须设置文档的文件保存页面和数据保存页面
//设置保存数据的页面
poCtrl.setSaveDataPage("SaveData.jsp");
//设置保存文档的页面
poCtrl.setSaveFilePage("SaveFile.jsp");
这里详细描述一下SaveDataPage和SaveFilePage的区别及结合使用
SaveFilePage:指定的页面可接受二进制文件流、Form域,直接保存修改后的文件。
SaveDataPage:指定的页面可接收页面提交的Word数据区域、Excel表格数据、Form域。
SaveFilePage:指定的页面只能创建FileServer对象。
SaveDataPage:指定的页面只能创建PageOffice.ExcelReader或PageOffice.WordReader命名空间下的对象。
SaveFilePage的使用:只需要保存修改后的文档,而不需要提取文档内容时。
SaveDataPage的使用:需要提交文档内容或用户输入的文档内容时。
5:具体的实现代码
(1)word 模板 (添加指定的书签)
2: 提交模式打开文档,设置文件保存页面及数据保存页面
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("保存", "Save", 1);
//设置保存数据的页面
poCtrl.setSaveDataPage("SaveData.jsp");
//设置保存文档的页面
poCtrl.setSaveFilePage("SaveFile.jsp");
//打开Word文档,当需要同时保存数据和保存文档时,OpenModeType必须是docSubmitForm模式。
poCtrl.webOpen("doc/test.doc", OpenModeType.docSubmitForm, "张佚名");
(2)保存数据的页面
WordDocument doc = new WordDocument(request, response);
//获取提交的数值
String dataUserName = doc.openDataRegion("PO_userName").getValue();
String dataDeptName = doc.openDataRegion("PO_deptName").getValue();
System.out.println("====="+dataUserName);
System.out.println("====="+dataDeptName);
doc.close();
(3)保存文件的页面
FileSaver fs=new FileSaver(request,response);
fs.saveToFile(request.getSession().getServletContext().getRealPath("SaveDataAndFile/doc/")+"/"+fs.getFileName());
fs.close();
5:实现效果
在线编辑文档,
获取数据打印的值
6:特殊情况下.需要只保存文档或者只保存数据
举个简单的例子. 比如 某个判断 条件是 "1" 的情况下,只保存文档.条件是2 的情况下 ,只保存数据
方案: 在页面中设置一个form域.保存的时候获取form域的值.根据form 域的值判断保存文件还是保存数据
具体代码:
页面效果
保存的实现代码
核心代码: 获取 PageOfficeCtrl 控件所在页面指定的Form控件的值。
具体实现代码
保存数据页面
WordDocument doc = new WordDocument(request, response);
//获取提交的数值
String dataUserName = doc.openDataRegion("PO_userName").getValue();
String dataDeptName = doc.openDataRegion("PO_deptName").getValue();
String condition= doc.getFormField("txtCondition");
//条件是2的情况下保存数据
if("2".equals(condition)){
//保存数据的代码
System.out.println("====="+dataUserName);
System.out.println("====="+dataDeptName);
}
doc.close();
保存文档页面
FileSaver fs=new FileSaver(request,response);
String condition= fs.getFormField("txtCondition");
//条件是 1 的情况保存文档
if("1".equals(condition)){
//保存文件
fs.saveToFile(request.getSession().getServletContext().getRealPath("SaveDataAndFile/doc/")+"/"+fs.getFileName());
}
fs.close();
7: 更多详细的代码 您可以下载示例参考一下 http://www.zhuozhengsoft.com/dowm/?v=4