點聚weboffice使用總結


近來的項目時在公司做內容管理系統,涉及到很多瀏覽器端的展示,公司統一用的是點聚的weboffice控件,以前沒用過,摸索了一段時間,總結和記錄一下在使用的過程中遇到的問題。

 

1.  安裝

安裝的過程還是很簡答的,個人覺得最簡答的做法是直接到點聚官網的在線使用,

http://www.dianju.cn:9236/gongwen/,下載控件,直接安裝,就可以用了。不過在開始安裝的時候也還是遇到一點問題,我是直接從同事那里拷貝過來的,然后把dll文件放到system32下面,用regsvr32命令注冊,結果不行。后來安裝的時候發現64位的系統syswow64文件夾下面,卸載的時候也要把該文件夾下的dll文件刪除。

 

2.使用

       關於weboffice的使用官方提供了一整套的開發文檔,應該說基本要用的功能都有了,不過對於新手還是得摸索一下才能熟悉,我當時有同事的例子一邊看一邊寫花了一兩天的時間才真正做點東西出來。

       初始化:

       其實就是把<object>對象放到頁面中,能找到的例子代碼都是這樣子:
var s = ""
s += "<object id=WebOffice1 height=768 width='100%' style='LEFT: 0px; TOP: 0px' classid='clsid:E77E049B-23FC-4DB8-B756-60529A35FAD5' codebase='WebOffice.ocx#version=7,0,0,0'>"
s +="<param name='_ExtentX' value='6350'><param name='_ExtentY' value='6350'>"
s +="</OBJECT>"
document.write(s)

反正我覺得很奇怪,因為這樣太不靈活了。

我修改的初始化方法:

var webObj = null;

/****************************************************
* 構造weboffice對象
* @containerID:置放weboffice對象的容器ID
* @webofficeID:webofficeID
/****************************************************/
function constructWebOffice(containerID,webofficeID){
var s = "";
s += "<object id="+webofficeID+" height=768 width='100%' style='LEFT: 0px; TOP: 0px' " +
"classid='clsid:E77E049B-23FC-4DB8-B756-60529A35FAD5' codebase='WebOffice.ocx#version=7,0,0,0'>";
s +="<param name='_ExtentX' value='6350'><param name='_ExtentY' value='6350'>";
s +="</object>";

$("#"+containerID).html(s);
webObj = document.getElementById(webofficeID);
webObj.ShowToolBar = false; //隱藏weboffice自帶工具欄
}

3.關於上傳到遠程服務器

Weboffice的上傳原理是先保存到本地臨時文件,然后模擬表單上傳文件,所以在服務器端接收上傳文件的程序也很簡單,和普通上傳文件一樣。

上傳的js方法:

/****************************************************
*
*保存weboffice的文檔到服務器
*@url : 保存文件的遠程地址
*
/****************************************************/
function saveToServer(postUrl){
webObj.HttpInit(); // 初始化Http 引擎
webObj.HttpAddPostCurrFile("file","");
var returnValue=webObj.HttpPost(postUrl);
return returnValue;
}
我這里url的指向是jsp文件,當然也可以指向action

var url =
"http://"+window.location.host+"/projectPathupload.jsp";


接受上傳文件的代碼:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.*,java.io.*" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.json.simple.*" %>
<%@ page import="org.apache.commons.fileupload.*"%>


<%
/**
* 保存webOffice文檔到服務器,返回相對地址
*
*/
String oapath = System.getProperty("oapath");
String savePath = oapath + "/portalfile/upload/";


String dirName = "attached";
savePath += dirName + "/";

String relativePath = "/upload/"+dirName+"/";
String saveUrl = relativePath;

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM");
String ymd = sdf.format(new Date());
savePath += ymd + "/";
saveUrl += ymd + "/";
File dirFile = new File(savePath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}

boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
DiskFileItemFactory factory=new DiskFileItemFactory();
//factory.setRepository(new File(savePath+"/temp"));// 設置緩沖區目錄
ServletFileUpload fu=new ServletFileUpload(factory);
//設置允許用戶上傳文件大小,單位:字節
fu.setSizeMax(100000000);
List fileItems = fu.parseRequest(request);
Iterator<FileItem> itr = fileItems.iterator();//所有的表單項

while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();//循環獲得每個表單項
if(!item.isFormField()){
String fileName = item.getName();//獲得文件名 包括路徑
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();//后綴名

SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
try{
File savedFile=new File(savePath+newFileName);
item.write(savedFile);
out.print(saveUrl+newFileName);
}catch(Exception e){
out.print("failed");
}
}
}

}

%>

4.上傳生成的pdf問題

       查了一下開發文檔,沒有找到保存當前文檔pdf到遠程服務器的接口,我用的折中方法是先保存pdf文件到本地,然后調用HttpAddPostFile接口添加生成在本地的文件到虛擬form中,再去上傳。

    Js方法如下:

/****************************************************
*保存為pdf文件到服務器
*@newName : 保存在服務器上的pdf文件名(相對路徑)
*@url : 遠程保存程序地址
****************************************************/
function saveAsPdf(newName,url){
//獲取臨時目錄
var tempPath = webObj.GetTempFilePath();
//更改文件名為pdf格式
var reg1 = /\\(\w+|\.)+$/;
tempPath = tempPath.replace(reg1,'\webofficeTemp.pdf');
//轉義"\"為"\\"
var reg2 = /\\/;
tempPath = tempPath.replace(reg2,'\\');

var success = webObj.SaveAsPDF("", tempPath, 0);

webObj.HttpInit(); // 初始化Http 引擎
webObj.HttpAddPostString("newName", newName);
webObj.HttpAddPostFile("tempFile", tempPath);

var returnValue=webObj.HttpPost(url);

}

服務器端和上傳word基本一致.

5.使用過程中遇到的一些問題

       a.對wps的兼容性不是特別好,有時候會出問題

       b.office基本上處於最高的顯示級別,設置index無效,會遮蓋掉div,遮罩層要特殊處理一下。



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com