天天看点

聊聊即时打印贴标机(实时打印贴标机)上位机软件开发(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,还是有很多不同的,毕竟屏幕和打印机是两种不同的输出设备,尤其是分辨率有很大不同,屏幕的分辨率要比打印机的分辨率低很多,所以,一张图片,在屏幕上看起来大小适中,但是打印出来就会让你失望,因为打印出来显得很小。所以,如果你的程序不仅仅要在屏幕上显示内容,也要具备打印的功能,那么就要考虑屏幕和打印机分辨率不同这个因素,做好尺寸和位置的转换,这样才能实现”所见即所得“的功能。