使用PageOffice实现文档(word,excel,pdf)在线预览编辑
生活随笔
收集整理的這篇文章主要介紹了
使用PageOffice实现文档(word,excel,pdf)在线预览编辑
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
最近發(fā)現(xiàn)一款不錯的插件的PageOffice,地址是:http://www.zhuozhengsoft.com/Technical/? 他可以實現(xiàn)word,excel、pdf在線預(yù)覽以及在線編輯。雖然商用的話需要收費,但是有免費的試用版,在實現(xiàn)自己畢業(yè)設(shè)計或是做樣品的時候 是一個不錯的選擇。他同時支持java\c#\php.一旦有了正真的項目花錢再買也可以。同時自己也可以熟悉如何使用。接著下面實現(xiàn)在線預(yù)覽。
首先自己需要安裝PageOffice控件 目前最新版本是4.2 。下載地址是:http://www.zhuozhengsoft.com/dowm/ 其中包括實例代碼。
1、安裝完后需要給自己的項目添加pageoffice4.jar 和java 添加jar包沒有區(qū)別。
2、啟動的時候第一次使用試用版會彈出一個框,需要添加一些信息,有一個序列號在最后我寫了。剩下 那個就是隨便填寫就可以。同時他會生成一個文件就是license.lic。他會在tomcat 項目部署的lib下。假如每次啟動都需要添加的話。你就需要把tomcat 部署項目lib 里的license.lic 復(fù)制到你的本地項目中。
3、預(yù)覽后臺代碼: public String openbar(HttpServletRequest request, HttpServletResponse response, @PathVariable int id,@PathVariable int flag) {// 設(shè)置PageOffice服務(wù)器組件PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);request.setAttribute("poCtrl1", poCtrl1);poCtrl1.setServerPage(request.getContextPath() + "/poserver.zz"); // 此行必須poCtrl1.setTitlebar(false); // 隱藏標(biāo)題欄(pageoffice的標(biāo)題)poCtrl1.setMenubar(false); // 隱藏菜單欄(文件一個設(shè)置)poCtrl1.setOfficeToolbars(false);// 隱藏Office工具條(word 的編輯按鈕)// poCtrl1.setCustomToolbar(false);// 隱藏自定義工具欄(保存 關(guān)閉 全屏)poCtrl1.addCustomToolButton("打印", "ShowPrintDlg()", 6);poCtrl1.addCustomToolButton("全屏切換", "SwitchFullScreen()", 4);poCtrl1.addCustomToolButton("關(guān)閉", "close", 21);List<FileMeta> entity = fileMetaService.getList(getEntity(flag, id));String path = ZipService.getPath(entity.get(0));String realpath = path.replace("/", "\\\\");String suffix = path.substring(path.lastIndexOf(".") + 1);if ("doc".equals(suffix) || "docx".equals(suffix)) {poCtrl1.webOpen(realpath, OpenModeType.docReadOnly, "張三");} else if ("xls".equals(suffix) || "xlsx".equals(suffix)) {poCtrl1.webOpen(realpath, OpenModeType.xlsReadOnly, "張三");}// 打開文件return "OpenWord";}
4'、在線編輯: /*** 在線編輯* * @param request* @param response* @param id* @param flag* @return*/@RequestMapping("openword/{flag}/{id}")public String openword(HttpServletRequest request, HttpServletResponse response, @PathVariable int id,@PathVariable int flag) {PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);request.setAttribute("poCtrl", poCtrl);poCtrl.setTitlebar(false);// 設(shè)置服務(wù)頁面poCtrl.setServerPage(request.getContextPath() + "/poserver.zz");// 添加保存按鈕poCtrl.addCustomToolButton("保存并關(guān)閉", "Save", 1);poCtrl.addCustomToolButton("打印", "ShowPrintDlg()", 6);poCtrl.addCustomToolButton("全屏切換", "SwitchFullScreen()", 4);// 設(shè)置保存的actionpoCtrl.setSaveFilePage(request.getContextPath() + "/wep/savefile/" + flag);// 打開wordList<FileMeta> entity = fileMetaService.getList(getEntity(flag, id));String path = ZipService.getPath(entity.get(0));String realpath = path.replace("/", "\\\\");String suffix = path.substring(path.lastIndexOf(".") + 1);if ("doc".equals(suffix) || "docx".equals(suffix)) {poCtrl.webOpen(realpath, OpenModeType.docNormalEdit, "張三");} else if ("xls".equals(suffix) || "xlsx".equals(suffix)) {poCtrl.webOpen(realpath, OpenModeType.xlsNormalEdit, "張三");}return "Word";} 5、在線編輯需要保存,所以有在線保存: /*** 保存* * @param request* @param response* @param flag*/@RequestMapping("savefile/{flag}")public void savefile(HttpServletRequest request, HttpServletResponse response, @PathVariable int flag) {FileSaver fs = new FileSaver(request, response);if (flag == 1) {// hse 保存路徑fs.saveToFile("D:\\Demo\\conhse\\" + fs.getFileName());} else if (flag == 2) {fs.saveToFile("D:\\Demo\\doc\\" + fs.getFileName());} else if (flag == 3) {fs.saveToFile("D:\\Demo\\hsequa\\" + fs.getFileName());} else if (flag == 4) {fs.saveToFile("D:\\Demo\\eva\\" + fs.getFileName());} else if (flag == 5) {fs.saveToFile("D:\\Demo\\leg\\" + fs.getFileName());} else if (flag == 6) {fs.saveToFile("D:\\Demo\\plan\\" + fs.getFileName()); }fs.close();} 6、web-xml配置 <!-- 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>/sealsetup.exe</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/posetup.exe</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/pageoffice.js</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/jquery.min.js</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/pobstyle.css</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.zz</url-pattern></servlet-mapping><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/loginseal.zz</url-pattern></servlet-mapping><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/sealimage.zz</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><!-- PageOffice End --> 7、jsp配置 <%@ page language="java"import="java.util.*,com.zhuozhengsoft.pageoffice.*"pageEncoding="UTF-8"%> <%PageOfficeCtrl poCtrl = (PageOfficeCtrl) request.getAttribute("poCtrl"); %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>最簡單的打開保存Word文件</title> <!-- <script type="text/javascript" > function getPageOfficeJsUrl(){var d=document.URL;var c=d.substring(0,find(d,"/",3)+1);var a=d.substring(0,find(d,"/",4)+1);var f=new Array();f[0]=c;f[1]=a;for(var b=0;b<f.length;b++){var e="pageoffice.js";ajax({url:f[b]+"/pageoffice.js",type:"GET",data:{name:"super"},dataType:"json",success:function(h,k){if(d.indexOf("?")>0){d=d.substring(0,d.indexOf("?"))}var g=countChar(d.substring(f[b].length),"/");for(var i=0;i<g;i++){e="../"+e}alert('src="'+e+'"')},fail:function(g){}})}}function countChar(d,e){var b=0;for(var a=0;a<d.length;a++){if(d.charAt(a)==e){b++}}return b}function find(e,b,c){var a=0;for(var d=0;d<c;d++){a=e.indexOf(b,a+1)}return a}getPageOfficeJsUrl();function ajax(a){a=a||{};a.type=(a.type||"GET").toUpperCase();a.dataType=a.dataType||"json";var c=formatParams(a.data);if(window.XMLHttpRequest){var b=new XMLHttpRequest()}else{var b=new ActiveXObject("Microsoft.XMLHTTP")}b.onreadystatechange=function(){if(b.readyState==4){var d=b.status;if(d>=200&&d<300){a.success&&a.success(b.responseText,b.responseXML)}else{a.fail&&a.fail(d)}}};if(a.type=="GET"){b.open("GET",a.url+"?"+c,false);b.send(null)}else{if(a.type=="POST"){b.open("POST",a.url,false);b.setRequestHeader("Content-Type","application/x-www-form-urlencoded");b.send(c)}}}function formatParams(c){var a=[];for(var b in c){a.push(encodeURIComponent(b)+"="+encodeURIComponent(c[b]))}a.push(("v="+Math.random()).replace(".",""));return a.join("&")}; </script> --> <script type="text/javascript" src="../../../jquery.min.js"></script> <script type="text/javascript" src="../../../pageoffice.js" id="po_js_main"></script> </head> <body><div style="width: 100%; height: 100%;"><%=poCtrl.getHtmlCode("PageOfficeCtrl1")%></div><script type="text/javascript">function Save() {document.getElementById("PageOfficeCtrl1").WebSave();POBrowser.closeWindow();//關(guān)閉POBrowser窗口}function ShowPrintDlg() {document.getElementById("PageOfficeCtrl1").ShowDialog(4); //打印對話框}function SwitchFullScreen() {//全屏document.getElementById("PageOfficeCtrl1").FullScreen = !document.getElementById("PageOfficeCtrl1").FullScreen;}</script> </body> </html>
注意:有時候jsp 和他的js 不在同一個目錄, 這時候在jsp頁面 使用<script type="text/javascript" >
function getPageOfficeJsUrl(){var d=document.URL;var c=d.substring(0,find(d,"/",3)+1);var a=d.substring(0,find(d,"/",4)+1);var f=new Array();f[0]=c;f[1]=a;for(var b=0;b<f.length;b++){var e="pageoffice.js";ajax({url:f[b]+"/pageoffice.js",type:"GET",data:{name:"super"},dataType:"json",success:function(h,k){if(d.indexOf("?")>0){d=d.substring(0,d.indexOf("?"))}var g=countChar(d.substring(f[b].length),"/");for(var i=0;i<g;i++){e="../"+e}alert('src="'+e+'"')},fail:function(g){}})}}function countChar(d,e){var b=0;for(var a=0;a<d.length;a++){if(d.charAt(a)==e){b++}}return b}function find(e,b,c){var a=0;for(var d=0;d<c;d++){a=e.indexOf(b,a+1)}return a}getPageOfficeJsUrl();function ajax(a){a=a||{};a.type=(a.type||"GET").toUpperCase();a.dataType=a.dataType||"json";var c=formatParams(a.data);if(window.XMLHttpRequest){var b=new XMLHttpRequest()}else{var b=new ActiveXObject("Microsoft.XMLHTTP")}b.onreadystatechange=function(){if(b.readyState==4){var d=b.status;if(d>=200&&d<300){a.success&&a.success(b.responseText,b.responseXML)}else{a.fail&&a.fail(d)}}};if(a.type=="GET"){b.open("GET",a.url+"?"+c,false);b.send(null)}else{if(a.type=="POST"){b.open("POST",a.url,false);b.setRequestHeader("Content-Type","application/x-www-form-urlencoded");b.send(c)}}}function formatParams(c){var a=[];for(var b in c){a.push(encodeURIComponent(b)+"="+encodeURIComponent(c[b]))}a.push(("v="+Math.random()).replace(".",""));return a.join("&")};
</script> 就可以輸出你本頁面pageoffice.js具體位置。 這就是簡單的使用更詳細具體需要去官網(wǎng)API看看。還有一些可以參考使用的,還有一些圖標(biāo)對應(yīng)使用。 PageOffice?V4.0?標(biāo)準(zhǔn)版試用序列號:5LB6J-1JIL-XE8X-AYY44
PageOffice?V4.0?專業(yè)版試用序列號:I1I92-4M46-R6B2-E15TX
PageOffice?V4.0?企業(yè)版試用序列號:I7TGD-71VV-FYD8-4NMYP
4'、在線編輯: /*** 在線編輯* * @param request* @param response* @param id* @param flag* @return*/@RequestMapping("openword/{flag}/{id}")public String openword(HttpServletRequest request, HttpServletResponse response, @PathVariable int id,@PathVariable int flag) {PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);request.setAttribute("poCtrl", poCtrl);poCtrl.setTitlebar(false);// 設(shè)置服務(wù)頁面poCtrl.setServerPage(request.getContextPath() + "/poserver.zz");// 添加保存按鈕poCtrl.addCustomToolButton("保存并關(guān)閉", "Save", 1);poCtrl.addCustomToolButton("打印", "ShowPrintDlg()", 6);poCtrl.addCustomToolButton("全屏切換", "SwitchFullScreen()", 4);// 設(shè)置保存的actionpoCtrl.setSaveFilePage(request.getContextPath() + "/wep/savefile/" + flag);// 打開wordList<FileMeta> entity = fileMetaService.getList(getEntity(flag, id));String path = ZipService.getPath(entity.get(0));String realpath = path.replace("/", "\\\\");String suffix = path.substring(path.lastIndexOf(".") + 1);if ("doc".equals(suffix) || "docx".equals(suffix)) {poCtrl.webOpen(realpath, OpenModeType.docNormalEdit, "張三");} else if ("xls".equals(suffix) || "xlsx".equals(suffix)) {poCtrl.webOpen(realpath, OpenModeType.xlsNormalEdit, "張三");}return "Word";} 5、在線編輯需要保存,所以有在線保存: /*** 保存* * @param request* @param response* @param flag*/@RequestMapping("savefile/{flag}")public void savefile(HttpServletRequest request, HttpServletResponse response, @PathVariable int flag) {FileSaver fs = new FileSaver(request, response);if (flag == 1) {// hse 保存路徑fs.saveToFile("D:\\Demo\\conhse\\" + fs.getFileName());} else if (flag == 2) {fs.saveToFile("D:\\Demo\\doc\\" + fs.getFileName());} else if (flag == 3) {fs.saveToFile("D:\\Demo\\hsequa\\" + fs.getFileName());} else if (flag == 4) {fs.saveToFile("D:\\Demo\\eva\\" + fs.getFileName());} else if (flag == 5) {fs.saveToFile("D:\\Demo\\leg\\" + fs.getFileName());} else if (flag == 6) {fs.saveToFile("D:\\Demo\\plan\\" + fs.getFileName()); }fs.close();} 6、web-xml配置 <!-- 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>/sealsetup.exe</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/posetup.exe</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/pageoffice.js</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/jquery.min.js</url-pattern></servlet-mapping><servlet-mapping><servlet-name>poserver</servlet-name><url-pattern>/pobstyle.css</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.zz</url-pattern></servlet-mapping><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/loginseal.zz</url-pattern></servlet-mapping><servlet-mapping><servlet-name>adminseal</servlet-name><url-pattern>/sealimage.zz</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><!-- PageOffice End --> 7、jsp配置 <%@ page language="java"import="java.util.*,com.zhuozhengsoft.pageoffice.*"pageEncoding="UTF-8"%> <%PageOfficeCtrl poCtrl = (PageOfficeCtrl) request.getAttribute("poCtrl"); %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>最簡單的打開保存Word文件</title> <!-- <script type="text/javascript" > function getPageOfficeJsUrl(){var d=document.URL;var c=d.substring(0,find(d,"/",3)+1);var a=d.substring(0,find(d,"/",4)+1);var f=new Array();f[0]=c;f[1]=a;for(var b=0;b<f.length;b++){var e="pageoffice.js";ajax({url:f[b]+"/pageoffice.js",type:"GET",data:{name:"super"},dataType:"json",success:function(h,k){if(d.indexOf("?")>0){d=d.substring(0,d.indexOf("?"))}var g=countChar(d.substring(f[b].length),"/");for(var i=0;i<g;i++){e="../"+e}alert('src="'+e+'"')},fail:function(g){}})}}function countChar(d,e){var b=0;for(var a=0;a<d.length;a++){if(d.charAt(a)==e){b++}}return b}function find(e,b,c){var a=0;for(var d=0;d<c;d++){a=e.indexOf(b,a+1)}return a}getPageOfficeJsUrl();function ajax(a){a=a||{};a.type=(a.type||"GET").toUpperCase();a.dataType=a.dataType||"json";var c=formatParams(a.data);if(window.XMLHttpRequest){var b=new XMLHttpRequest()}else{var b=new ActiveXObject("Microsoft.XMLHTTP")}b.onreadystatechange=function(){if(b.readyState==4){var d=b.status;if(d>=200&&d<300){a.success&&a.success(b.responseText,b.responseXML)}else{a.fail&&a.fail(d)}}};if(a.type=="GET"){b.open("GET",a.url+"?"+c,false);b.send(null)}else{if(a.type=="POST"){b.open("POST",a.url,false);b.setRequestHeader("Content-Type","application/x-www-form-urlencoded");b.send(c)}}}function formatParams(c){var a=[];for(var b in c){a.push(encodeURIComponent(b)+"="+encodeURIComponent(c[b]))}a.push(("v="+Math.random()).replace(".",""));return a.join("&")}; </script> --> <script type="text/javascript" src="../../../jquery.min.js"></script> <script type="text/javascript" src="../../../pageoffice.js" id="po_js_main"></script> </head> <body><div style="width: 100%; height: 100%;"><%=poCtrl.getHtmlCode("PageOfficeCtrl1")%></div><script type="text/javascript">function Save() {document.getElementById("PageOfficeCtrl1").WebSave();POBrowser.closeWindow();//關(guān)閉POBrowser窗口}function ShowPrintDlg() {document.getElementById("PageOfficeCtrl1").ShowDialog(4); //打印對話框}function SwitchFullScreen() {//全屏document.getElementById("PageOfficeCtrl1").FullScreen = !document.getElementById("PageOfficeCtrl1").FullScreen;}</script> </body> </html>
注意:有時候jsp 和他的js 不在同一個目錄, 這時候在jsp頁面 使用<script type="text/javascript" >
function getPageOfficeJsUrl(){var d=document.URL;var c=d.substring(0,find(d,"/",3)+1);var a=d.substring(0,find(d,"/",4)+1);var f=new Array();f[0]=c;f[1]=a;for(var b=0;b<f.length;b++){var e="pageoffice.js";ajax({url:f[b]+"/pageoffice.js",type:"GET",data:{name:"super"},dataType:"json",success:function(h,k){if(d.indexOf("?")>0){d=d.substring(0,d.indexOf("?"))}var g=countChar(d.substring(f[b].length),"/");for(var i=0;i<g;i++){e="../"+e}alert('src="'+e+'"')},fail:function(g){}})}}function countChar(d,e){var b=0;for(var a=0;a<d.length;a++){if(d.charAt(a)==e){b++}}return b}function find(e,b,c){var a=0;for(var d=0;d<c;d++){a=e.indexOf(b,a+1)}return a}getPageOfficeJsUrl();function ajax(a){a=a||{};a.type=(a.type||"GET").toUpperCase();a.dataType=a.dataType||"json";var c=formatParams(a.data);if(window.XMLHttpRequest){var b=new XMLHttpRequest()}else{var b=new ActiveXObject("Microsoft.XMLHTTP")}b.onreadystatechange=function(){if(b.readyState==4){var d=b.status;if(d>=200&&d<300){a.success&&a.success(b.responseText,b.responseXML)}else{a.fail&&a.fail(d)}}};if(a.type=="GET"){b.open("GET",a.url+"?"+c,false);b.send(null)}else{if(a.type=="POST"){b.open("POST",a.url,false);b.setRequestHeader("Content-Type","application/x-www-form-urlencoded");b.send(c)}}}function formatParams(c){var a=[];for(var b in c){a.push(encodeURIComponent(b)+"="+encodeURIComponent(c[b]))}a.push(("v="+Math.random()).replace(".",""));return a.join("&")};
</script> 就可以輸出你本頁面pageoffice.js具體位置。 這就是簡單的使用更詳細具體需要去官網(wǎng)API看看。還有一些可以參考使用的,還有一些圖標(biāo)對應(yīng)使用。 PageOffice?V4.0?標(biāo)準(zhǔn)版試用序列號:5LB6J-1JIL-XE8X-AYY44
PageOffice?V4.0?專業(yè)版試用序列號:I1I92-4M46-R6B2-E15TX
PageOffice?V4.0?企業(yè)版試用序列號:I7TGD-71VV-FYD8-4NMYP
總結(jié)
以上是生活随笔為你收集整理的使用PageOffice实现文档(word,excel,pdf)在线预览编辑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬取三国杀咨询网站的新皮肤
- 下一篇: Java实现给PDF文件加水印、图片、签