4、 將報表保存為圖形文件
ReportListener 的另一種很大的用途是通過在你專門的子類中覆蓋 OutputPage 方法來將一個報表保存為圖形文件?梢员4娴膱D形文件格式包括 EMF、JPEG、GIF、PNG、BMP、TIFF、以及多頁的 TIFF(這種格式對于用傳真發(fā)送報表來說特別有用)。 注意,在這個示例的代碼中,我將 ListenerType 屬性設(shè)置為了2,這意味著讓你自己來控制輸出,每次用參數(shù) nDeviceType = -1 調(diào)用 OutputPage 方法就打印一頁,但并不將輸出發(fā)送到一個打印設(shè)備。MyReportListener 有一個自定義的 OutputPage 方法,它先檢查 nDeviceType 的參數(shù)是否為 -1,然后再次調(diào)用 OutputPage 方法(給方法傳遞一個文件名和圖形文件類型),再執(zhí)行一個 NODEFAULT。這個示例在生成第一頁的時候建立一個 TIFF 文件,然后將其它的頁添加到同一個圖形文件中去。 LOCAL olistener * 建立一個 ReportListener 的實例
olistener = CREATEOBJECT("MyTiffListener")
olistener.tifffilename = "c:\tifftest.tif" * 運行一個將會引用我們設(shè)置好了的 Listener的 報表
REPORT FORM (_samples+"solution\reports\invoice.frx") ;
OBJECT olistener RANGE 1,2 * 在瀏覽器中顯示結(jié)果
RUN /n Explorer.exe c:\tifftest.tif DEFINE CLASS MyTiffListener AS ReportListener
tifffilename = []
listenertype = 2 && 一次一頁,不輸出 FUNCTION OutputPage(nPageNo, eDevice, nDeviceType)
* 由于 ListenerType 指定了 "不打印輸出"
* 在報表引擎調(diào)用這個方法的時候,nDeviceType 將會是 -1
* 而我們現(xiàn)在則捕捉這個條件,然后自己來調(diào)用
* OutputPage 方法,調(diào)用時帶上文件名和圖形類型參數(shù)
IF nDeviceType = -1 ;
AND NOT EMPTY(THIS.tifffilename)
IF nPageNo = 1
* 如果是第一頁,則建立TIFF文件
THIS.OutputPage(nPageNo, THIS.tifffilename, 101)
ELSE
* 否則,則向 TIFF 文件添加剩下的頁
* (這段代碼要運行,首先 TIFF 文件必須已經(jīng)存在)
THIS.OutputPage(nPageNo, THIS.tifffilename, 201)
ENDIF
* 我們已經(jīng)用需要的設(shè)置調(diào)用過 OutputPage 方法了
NODEFAULT
ENDIF
ENDDEFINE