在C#中使用证卡打印机的心得

  在开发过程中由于公司暂时没有证卡打印机,只好通过普通的A4纸打印机做练习。咱们的普通黑白打印机在打印一些文字和图片犹豫是黑白颜色的,所以显示不出来什么效果,无论调整大小和分辨率出来的效果几乎一致。在项目上线后客户买了证卡打印机结果打印出来的效果特别差(马赛克)。因为卡片的尺寸是338×213的,所以起初设计的发送给打印机的图片大小也是338×213的,经过多次个方面的测试打印出来的效果都是极差,问了问证卡打印机在中关村的代理商,他们告诉结果确是调整图片的DPI,但是DPI调整后仍然不行。当时我也猜到人家只是代理商,估计过多的技术问题他们也不懂。后来代理商发了一些证卡打印机厂商给一些资料里发现设计的图片要比338×213大N倍才可以。

  既然是证卡打印机所以卡片上的内容都是动态生成的。所以要根据设计的文字和图片大小动态去调整大小才可以实现。按照厂商给提供的图片大小1004×650打印出来效果比以前好多了,但是文字会出现锯齿。解决文字出现的锯齿问题如下:

起初是将文字画在了背景图片上面所以出现了锯齿,后来发现既然证卡打印机也是驱动打印,所以干脆先发送一张照片过去然后在发送文字过去,打印出来的效果解决了。

废话不再多说了,实现的代码如下:

void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
        {
            Image img = null;
            e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
           
            //正面背景图
            if (cdCfg.BackImgFlg && cardType.ZMBJT != null)
            {
                try
                {
                    //背景展示
                    using (System.IO.MemoryStream ms = new System.IO.MemoryStream(cardType.ZMBJT))
                    {
                        img = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter().Deserialize(ms) as Image;
                    }
                }
                catch { }
            }
            //发送打印背景图片
            if (img != null)
            {
                e.Graphics.DrawImage(img, 0, 0, picBackGround1.Width + 5, picBackGround1.Height + 2);
            }
            //发送照片
            if (cdCfg.PhotoFlag)
            {
                //判断是否存在照片
                if (_user.ZP != null)
                {
                    try
                    {
                        //照片展示
                        using (System.IO.MemoryStream ms = new System.IO.MemoryStream(_user.ZP))
                        {
                            //画照片
                            e.Graphics.DrawImage(Image.FromStream(ms), cdCfg.PhotoLocation.X, cdCfg.PhotoLocation.Y, cdCfg.PhotoSize.Width, cdCfg.PhotoSize.Height);
                        }
                    }
                    catch (Exception ex) { FormFactory.ShowMessageBoxErrorDialog(this, "加载照片失败!", ex.Message); }
                }
            }
            //发送要打印的文字信息
            //循环遍历要打印的标签(cdCfg是已经设计好的文字信息,包含了文字的颜色字体大小等)
            for (int i = 0; i < cdCfg.LabelCfgList.Length; i++)
            {
                Font font = new Font(cdCfg.LabelCfgList[i].MyFont.Name, cdCfg.LabelCfgList[i].MyFont.Size, cdCfg.LabelCfgList[i].MyFont.Style);
                SolidBrush sbrush = new SolidBrush(cdCfg.LabelCfgList[i].MyColor);
                PointF point = new PointF(cdCfg.LabelCfgList[i].MyLocation.X, cdCfg.LabelCfgList[i].MyLocation.Y);
                //发送要打印的文字
                if (cdCfg.LabelCfgList[i].VariablFlag)
                {
                    e.Graphics.DrawString(GetValueByName(_user, cdCfg.LabelCfgList[i].VariableName), font, sbrush, point);
                }
                else
                {
                    e.Graphics.DrawString(cdCfg.LabelCfgList[i].Text, font, sbrush, point);
                }
            }
            //e.Graphics.DrawImage(picBackGround1.BackgroundImage, 0, 0, picBackGround1.Width, picBackGround1.Height);
            e.HasMorePages = false;
        }

 

如果代码大家看不懂话可以给我留言。

转载于:https://www.cnblogs.com/thtfria/archive/2012/04/04/2432116.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值