一.用Cell插件實(shí)現(xiàn)Java界面的打印簡(jiǎn)介
(1) 在HTML頁(yè)面上嵌入華表的Cell插件;
為了在Applet界面中調(diào)用華表的Cell插件,我們首先在HTML頁(yè)面上隱藏了一個(gè)Cell插件:
<OBJECT id=c style="LEFT: 0px; WIDTH: 828px; TOP: 0px; HEIGHT: 509px"
classid="clsid:3F166327-8030-4881-8BD2-EA25350E574A" VIEWASTEXT>
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="17526">
<PARAM NAME="_ExtentY" VALUE="10774">
<PARAM NAME="_StockProps" VALUE="0"></OBJECT>
通過(guò)style="HEIGHT: 0px; WIDTH: 0px"指定Cell插件的高度和寬度都為0,從而達(dá)到隱藏Cell插件的目的。
(2) 在Applet中提供兩個(gè)調(diào)用接口方法;
下面是一個(gè)Applet的代碼實(shí)例,其中提供了callCellMethod()和callJavaScriptMethod()兩個(gè)接口方法,分別可用來(lái)調(diào)用Cell插件的方法和JavaScript的方法:
public class MyApplet extends javax.swing.JApplet {
private JSObject win = null;
private JSObject cell = null;
public Object callCellMethod(String name, Object[] params) {
return getCell().call(name, params);}
public Object callJavaScript(String name, Object[] params) {
return getJSwin().call(name, params);}
private JSObject getCell() {
if (cell == null) {
try {
JSObject doc = (JSObject)getJSwin().getMember("document");
JSObject all = (JSObject)doc.getMember("all");
cell = (JSObject)all.call("item", new Object[]{"DCellWeb1"});}
catch (Exception e) {
e.printStackTrace();} }
return cell;}
private netscape.javascript.JSObject getJSwin() {
if (win == null) {
win = netscape.javascript.JSObject.getWindow(this);}
return win;}}
通過(guò)getCell()這個(gè)方法,可以在Java Applet中直接獲得用JSObject表示的Cell插件,從而可以直接調(diào)用它的方法。例如,在Java Applet中向Cell插件的一個(gè)單元格寫(xiě)入數(shù)據(jù),可以如下調(diào)用:
Integer row = new Integer(1);
Integer column = new Integer(1);
Integer page = new Integer(0);
callCellMethod("SetCellString", new Object[]{column, row, page, “str”});
其中SetCellString是Cell插件提供的接口方法。這樣就實(shí)現(xiàn)了從Java Applet到華表的Cell插件的調(diào)用。
二.Cell插件如何實(shí)現(xiàn)客戶端與服務(wù)端的數(shù)據(jù)交換:
(1) 添加CELL插件至網(wǎng)頁(yè)中:
具體方法請(qǐng)參閱一
(2) 從服務(wù)器端讀取數(shù)據(jù):
A. 打開(kāi)報(bào)表模板:
在這里之所以在請(qǐng)求XML數(shù)據(jù)前要先有打開(kāi)報(bào)表模板,是因?yàn)槿绻麑?bào)表樣式都存放在XML數(shù)據(jù)中,勢(shì)必會(huì)增加X(jué)ML數(shù)據(jù)量,一方面影響網(wǎng)頁(yè)的運(yùn)行速度;另一方面,一旦更改報(bào)表樣式后,就得修改程序代碼,從而增加程序開(kāi)發(fā)和代碼維護(hù)的工作量;而在模板中存放報(bào)表格式,查詢報(bào)表時(shí)先打開(kāi)模板,上傳數(shù)據(jù)和下傳數(shù) 據(jù)時(shí)只需傳送實(shí)際的報(bào)表數(shù)據(jù),從而大大減少傳送數(shù)據(jù)量和工作量;模板文件可以通過(guò)外部程序(可以使用CELL自帶的報(bào)表設(shè)計(jì)器)設(shè)計(jì),模板文件存放至服務(wù)器端的某個(gè)虛擬目錄下,使用CELL的OpenFile方法打開(kāi),文件路徑可以是相對(duì)路徑。
B. 服務(wù)器端生成XML數(shù)據(jù)并發(fā)送給客戶端:
客戶端打開(kāi)模板后,根據(jù)查詢要求向服務(wù)器端發(fā)送請(qǐng)求,服務(wù)器端接收到請(qǐng)求后,組織XML數(shù)據(jù),再發(fā)送給客戶端;
B. 客戶端接收XML數(shù)據(jù),分析、填充至CELL中:
(3) 保存數(shù)據(jù)到服務(wù)器端:
四:Cell插件如何分發(fā)
分發(fā) Cell 插件需要分發(fā)2個(gè) OCX 文件,1個(gè) DLL 文件, 可以通過(guò)Cab包的形式供客戶端下載安裝。