VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 打印预览
发表评论(0)作者:, 平台:, 阅读:25747, 日期:2000-03-12
預覽列印

VB 要如何做到預覽列印的功能?這個問題已經不知被大家問過多少回了,但是始終找不到網路上有相關的 Source,直到帥帥阿柳的 VB 站台提供了一個預覽列印的程式,有興趣的網友可以去看看。關於預覽列印的功能,我在幾年前寫畢業專題時就接觸過 (台科大化工系的化技實習數據處理系統),只是一直很懶得去重新看以前寫過的程式碼,因為預覽列印的程式碼很繁瑣,不是兩三行能解決的,好在最近畢業了,於是就抽空看看那些程式,我做了滿多修改,但是還是有個缺點,就是為了讓任何顯示比例下的資料都不會失真,必須在每次改變顯示比例時都重新繪圖,如此使得執行效率降低甚多,而如果不這麼做的話,雖可以加快執行效率,但是預覽時資料有失真之虞。以下就將我寫的預覽列印程式做一整理,由於程式碼較長,所以在此不列出。


一般來說預覽列印可以分成兩部分來談,一部份就是要列印的資料;另一部份就是如何顯示這些資料以達到預覽的功能,後者是比較重要也是比較困難的部分。通常要列印的資料可以兩種方式來呈現:


預先在表單上佈置好那些控制項(TextBox、Label、Image...etc)的大小及位置,就跟列印出來的大小及位置的比例一樣,這樣在顯示或列印資料時可以用 TypeOf 或 TypeName 等函數來判斷要印什麼,可以免除一大堆 CurrentX、CurrentY 的設定,但是此法不一定適用於所有情況。


表單上的控制項佈置以簡潔、方便輸入為原則,顯示或列印資料時用 Print、Line、CurrentX、CurrentY 等圖形方法,雖然算是做苦工,但是編排效果最好,以下的介紹使用這種方法。


譬如本程式以下述表單來代表要列印的資料:




接下來就是如何顯示這些要列印的資料,按下 "預覽列印" 鈕之後出現下述視窗:




這是 100% 顯示的效果,所以文字比較清楚,虛線是代表列印的邊界,真正列印時不會印出來。上述視窗只包含第一頁的左上角部分,我捨棄了傳統用捲軸的方式,而改用滑鼠拖曳圖片就可以看到所有的列印資料(就跟用ACDSee這套軟體看圖時一樣)。另外,這個預覽列印視窗是可以改變大小的,而且其有兩個功能表如下:




"檢視" 功能表可以更改顯示的比例 (在表單上按滑鼠右鍵亦可顯示 "檢視" 功能表),由於預設的 "原始圖片" 的比例是 100%,而且是點陣圖,因此縮小後 (顯示比例小於 80% ) 失真情形非常嚴重,目前想到可以使用 CreateMetaFile API 產生向量圖以彌補點陣圖在縮放時的失真情形,但是還沒著手去做。另一種避免失真的方法是在每次改變顯示比例時都重新繪圖,但如此使得執行效率降低甚多,而如果不這麼做的話,雖可以加快執行效率,但是預覽的資料有失真之虞。在功能表的 /檔案/版面設定/ 將可以決定是否要使用這種避免失真的方法。


註:所謂 "原始圖片" 是指一個在執行階段被隱藏起來的圖片框 (PictureBox),這個圖片框是用來輸出要列印的資料,輸出完成後將圖片框的 Image 屬性指定給影像框的 Picture 屬性,而影像框就是使用者可看到的預覽結果。所謂顯示比例 100%是指相當於 A4 紙張的大小,也就是長 29.7cm,寬 21cm。


"檔案" 功能表的 "版面設定" 功能主要是設定列印邊界,您可以自行擴充其它需要的功能。而 "預覽條件" 的設定說明如下:


選取 "每次改變顯示比例時都重新繪圖",代表每次改變顯示比例時都會重新呼叫 PrintResult 副程式來繪圖,這樣預覽列印的結果將沒有失真之虞,但是執行速度較慢。


選取 "不重新繪圖,但是重新設定原始圖片的比例",代表每次改變顯示比例時並不會重新繪圖,而是直接改變影像框中點陣圖的大小以符合新的顯示比例,這樣速度很快,但是預覽列印的結果會失真,失真的情形取決於原始圖片的比例大小,愈大的數值將耗用較多的記憶體,同時縮小後易失真;愈小的數值耗用的記憶體較少,但是放大後易失真。




"列印" 功能表將呼叫出 Windows 的列印共通對話方塊來執行列印的工作,目前提供的預覽列印功能限定是 A4大小、直式列印的樣式,其他紙張大小或列印方向與這個程式大同小異,只要稍加修改即可。以上視窗的程式碼皆壓縮成 zip 檔,您可以按這裡來下載。