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();