天天看點

聊聊即時列印貼标機(實時列印貼标機)上位機軟體開發(2)

前一篇文章,簡單的介紹了一下即時列印貼标機(實時列印貼标機)。這篇文章,我們聊聊即時列印貼标機的上位機軟體開發。

本質

其實抛開即時列印貼标機的貼标功能子產品,即時列印貼标機其餘部分本質上就是一台列印機。是以,我們的上位機軟體開發,其實就是調用這台列印機來列印一些東西出來,跟我們在其它列印機(比如辦公室常用的HP列印機)上開發列印功能沒什麼差別。

對于開發windows桌面程式的程式猿來說,或多或少都接觸過列印方面的功能開發。其實很簡單,因為windows對列印支援的非常好,不管是針式列印機、還是雷射列印機,對于我們程式員來說沒有差別,隻要安裝好列印機驅動就可以了,然後,我們可以通過GDI/GDI+接口,讓列印機列印輸出,比如列印輸出一行文本、列印一張圖檔等等,這些跟我們在螢幕上調用GDI/GDI+接口來繪制文本、顯示圖檔沒有差別,隻不過底層的輸出裝置,從顯示卡變成了列印機而已。

例如,我們比較一下在螢幕上顯示圖檔和用列印機列印圖檔:

螢幕顯示圖檔

所謂螢幕顯示,其實也就是顯示在某個視窗上,一般來說,我們在視窗的繪圖消息中處理,這樣當視窗最小化恢複後,仍然可以顯示圖檔。

protected override void OnPaint(PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.DrawImage(image, 0,  0);
        }
           

列印機列印圖檔

這裡就不詳細介紹C#實作列印功能了,簡單說下,C#提供了一個叫着PrintDocument的列印元件(在工具箱裡面可以添加),然後響應PrintPage事件:

private void pd1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
	Graphics g = e.Graphics;
	g.DrawImage(image, 0,  0);
}
           

從上面的對比可以看出,在螢幕上顯示一張圖檔和用列印機列印出一張圖檔,代碼是一樣的,唯一的差別就是Graphics對象不同,一個是顯示卡的Graphics,一個是列印機的Graphics。也就是說,上層接口都是一樣,都是GDI/GDI+接口,下層不同的驅動,實作不同的功能:顯示卡驅動将圖檔顯示在螢幕上;列印機驅動将圖檔列印出來。

當然了,雖然說在螢幕上顯示和列印輸出,都是調用同樣的API,還是有很多不同的,畢竟螢幕和列印機是兩種不同的輸出裝置,尤其是分辨率有很大不同,螢幕的分辨率要比列印機的分辨率低很多,是以,一張圖檔,在螢幕上看起來大小适中,但是列印出來就會讓你失望,因為列印出來顯得很小。是以,如果你的程式不僅僅要在螢幕上顯示内容,也要具備列印的功能,那麼就要考慮螢幕和列印機分辨率不同這個因素,做好尺寸和位置的轉換,這樣才能實作”所見即所得“的功能。