1.需求java
java 实现不一样用户编辑 word 文档的不一样区域(https://my.oschina.net/u/3507515/blog/2413926)web
这篇文章主要介绍了不一样的用户编辑不一样的区域.可是若是多个用户同时编辑保存文档文档的时候就会出现相互覆盖的问题, 因此 pageoffice 提供了不一样用户同时编辑word 文档不一样区域的方法服务器
2:核心思想以及代码jsp
思想: 保存的时候拆分红子文件保存(数据区域的内容做为文件提交).net
代码:code
d1.setSubmitAsFile(true); d2.setSubmitAsFile(true);
3:具体的实现代码orm
由于保存的时候是做为子文件保存的.因此打开的时候须要把子文件填充到word 模板中,而后在进行编辑保存server
String userName = request.getParameter("userName"); //***************************卓正PageOffice组件的使用******************************** WordDocument doc = new WordDocument(); //打开数据区域 DataRegion d1 = doc.openDataRegion("PO_com1"); DataRegion d2 = doc.openDataRegion("PO_com2"); //给数据区域赋值 d1.setValue("[word]doc/content1.doc[/word]"); d2.setValue("[word]doc/content2.doc[/word]"); //若要将数据区域内容存入文件中,则必须设置属性“setSubmitAsFile”值为true d1.setSubmitAsFile(true); d2.setSubmitAsFile(true); //根据登陆用户名设置数据区域可编辑性 //甲客户:zhangsan登陆后 if (userName.equals("zhangsan")) { d1.setEditing(true); d2.setEditing(false); } //乙客户:lisi登陆后 else { d2.setEditing(true); d1.setEditing(false); } PageOfficeCtrl poCtrl = new PageOfficeCtrl(request); poCtrl.setWriter(doc); //添加自定义按钮 poCtrl.addCustomToolButton("保存", "Save", 1); poCtrl.addCustomToolButton("全屏/还原", "IsFullScreen", 4); //设置服务器页面 poCtrl.setServerPage(request.getContextPath()+"/poserver.zz"); //此行必须 //设置保存页 poCtrl.setSaveDataPage("SaveData.jsp?userName=" + userName); //设置文档打开方式 poCtrl.webOpen("doc/test.doc", OpenModeType.docSubmitForm, userName);
保存的代码blog
WordDocument doc = new WordDocument(request, response); byte[] bytes = null; String filePath = ""; if (request.getParameter("userName") != null && request.getParameter("userName").trim().equalsIgnoreCase("zhangsan")) { bytes = doc.openDataRegion("PO_com1").getFileBytes(); filePath = "content1.doc"; } else { bytes = doc.openDataRegion("PO_com2").getFileBytes(); filePath = "content2.doc"; } doc.close(); filePath = request.getSession().getServletContext().getRealPath("SetDrByUserWord2/doc/") + "/" + filePath; FileOutputStream outputStream = new FileOutputStream(filePath); outputStream.write(bytes); outputStream.flush(); outputStream.close();