引言:
wse提供了乙個非常方便的功能,就是支援附件的傳輸,儘管我們可以採用別的方式來達到這個目的,比如直接的返回byte型的資料,但是對於大多數應用而言,直接返回乙個附件,如一張更為實在些,請大家不要誤會我文章的標題,以為建立乙個webservice就可以方便地實現了列印了,我們的軟體原理和最終列印的方式跟盧彥先生裡提到的並無多大區別,我們只是利用了webservice的強大的穿透性,來使這個方式更為靈活,更易於應用和拓展,本文所採用的**全部用c#編寫。
軟體原理:
本文採用了xml形式的資料,客戶端將需要列印的資料和一些基本的引數,如圖象大小,圖象形式等傳送給伺服器端,而伺服器端則根據客戶端的要求生成特定的一張或多張返回給客戶端,由客戶端的列印程式統一處理,看了這個邏輯我們就可以發現:所有的業務規則完全在伺服器端運做,而客戶端只需要少量的**就可以實現報表的列印。這樣就避免了各種公升級所帶來的煩惱,當實際運用中要求增加一種或多種圖表的時候,我們所需要做的只是增加或者修改伺服器端的業務規則,而客戶所要做的只是告訴我們要列印這種圖表就可以了。
<?xml version="1.0" encoding="utf-8"?>
其中printtype就是客戶端要求的列印型別。
程式實現:
伺服器端**
本系統也同樣採用了abstract factory的設計模式,以利於伺服器端方便的擴充套件,此處就不再贅述。
新建乙個web服務專案,新增抽象基類,實現類,解析類,建成後的介面如下所示:
需要加入對microsoft.web.services命名空間的引用
其中printbase.cs是基類
parser.cs是解析類
lineprint.cs是實現具體圖象的類
基類**:
public class printbasepublic virtual stream drawimage()
}
解析類**:
public class parserpublic static printbase createelement(dataset ds)
return pb;
}}
實現類的**:
/// /// 過載畫的規則///
/// 圖象stream
public override stream drawimage()
我個人一直比較喜歡用dataset操作小型的xml資料,大家請按自己喜好調整,此處展示的方法將直接供web服務類呼叫。
web服務類的**:
[webmethod]public bool createimage(dataset ds)
catch
return l_bstatus;
}
至此,我們伺服器端的**就基本完成了,下面我們來看客戶端所需要做的工作,我在此處建立了乙個winform工程來做演示用,實際運用中,則採用盧彥文章裡提到的usercontrol就可以了。
客戶端**:
private void button1_click(object sender, system.eventargs e)}
在這裡,我們用dataset載入xml,並呼叫webservice返回圖象stream,可以看到,客戶端的工作變得非常簡單,只需要呼叫個webservice就可以,wse對於附件的支援完成的很好,**也極為的簡單。我還做了一步列印預覽的工作來測試我建立的,如下:
至此,我們就大功告成了。
注意事項:
需在web服務專案中的web.config內加入以下語句,以保證**的正確執行。
dd type="microsoft.web.services.webservice***tension,microsoft.web.services,version=1.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35"
priority="1" group="0"/>
否則web服務**裡的soapcontext sc = httpsoapcontext.responsecontext; sc將永遠返回null值。
儘管在我的測試下web服務所表現出來的效能相當ok,但是在實際運用中,朋友們還得仔細測試一下才行。
總結:通過上面的描述,相信大家也有同樣的體會,那就是擴充套件非常的方便,在實際應用中,客戶所要求列印的資料不會發生很大變化,而對這些資料進行的彙總、列表卻有著複雜的要求,通過webservice的方式,我們把這種變化集中在伺服器端,儘量減少了客戶端程式的改動,伺服器端完全可以採用更強大的第三方元件來實現繪圖功能;對於多頁列印的應用,由於wse支援多個附件的好處,我們既可以採用一次性傳送所有資料在伺服器端生成對應的多個圖表返回,也可以分批傳送;由於採用了xml的介質,資料的採集也實現了多樣化,您完全可以在a伺服器上採集資料,在b伺服器上實現列印。
工具:
基於VB和EXCEL的報表設計及列印
with zsbexcel.activesheet.range a2 c9 borders linestyle xlborderlinestylecontinuous weight xlthin colorindex 1 end with with zsbexcel.activesheet.rang...
wpf 基於模板的報表設計及列印預覽
wpf 中可以使用reportingservers 水晶報表等東西,但是如果使用reportingservers 在頻繁的資料互動中是 比較浪費資源或者存在效率問題。所以還有沒有更好的辦法呢。答案肯定是有的。wpf中基於模板的報表設計就可以完成以上內容,對於要修改的報表檔案是以檔案的方式存放在伺服器...
基於MySQL的水晶報表及亂碼解決
mysql的基本引數設定 建立資料庫,字符集為utf 8 裡面建了兩張表,test1字符集為gb2312,test2utf8為utf 8 表裡的資料均為中文 用mysql建立報表的一般步驟如下 我們使用的驅動字串為 這個時候生成的報表是這樣的,放到程式裡效果如下 解決方法 安裝5.1版本的mysql...