点晴MIS内部交流论坛 加入收藏
新手上路
论坛搜索
 您的位置:点晴MIS系统问题答疑『 经验分享&问题答疑 』浏览当前帖子  
登 陆注 册论坛帮助  

  网站搜索
  搜索范围: 搜索方式: 关键词(可用空格分开)  

  作者及文章信息: 本文热度:371 % 
admin

积分:74803
等级:网站管理员
文数:13698
注册:2004-7-20

 信息   留言   主页   编辑   引用    

楼 顶 

 使用C# WinForm实现打印小票的功能


1 打印效果


2 生成二维码和条形码的dll

条码和二维码生成的DLL

3 二维码生成类QRcodeCreator

using ThoughtWorks.QRCode.Codec; namespace LotteryPro { public class QRcodeCreator { #region 根据链接生成二维码 /// <summary> /// 根据链接获取二维码 /// </summary> /// <param name="url">链接</param> /// <returns>返回二维码图片</returns> public static Image GetQRCodeBmp(string url) { QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeScale = 4; qrCodeEncoder.QRCodeVersion =0; qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; return qrCodeEncoder.Encode(url); } #endregion } }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

4 打印彩票方法编写

/// <summary> /// 打印彩票 /// </summary> public void PrintLottery(System.Drawing.Printing.PrintPageEventArgs e, string serialNum, List<string> numList) { //生成条形码 Fath.BarcodeX barCode = new Fath.BarcodeX();//创建条码生成对象 barCode.Text = serialNum;//条码数据 barCode.Symbology = Fath.bcType.Code128;//设置条码格式 barCode.ShowText = true;//同时显示文本 e.Graphics.DrawImage(barCode.Image(240, 50), new Point(20, 5));//画条形码 //生成彩票信息 float left = 2; //打印区域的左边界 float top = 70;//打印区域的上边界 Font titlefont = new Font("仿宋", 10);//标题字体 Font font = new Font("仿宋", 8);//内容字体 e.Graphics.DrawString("天津百万奖彩票中心", titlefont, Brushes.Blue, left + 20, top, new StringFormat());//打印标题 //画一条分界线 Pen pen = new Pen(Color.Green, 1); e.Graphics.DrawLine(pen, new Point((int)left - 2, (int)top + 20), new Point((int)left + (int)180, (int)top + 20)); //循环打印选号 for (int i = 0; i < numList.Count; i++) { e.Graphics.DrawString(numList[i], font, Brushes.Blue, left, top + titlefont.GetHeight(e.Graphics) + font.GetHeight(e.Graphics) * i + 12, new StringFormat()); } //画一条分界线 float topPoint = titlefont.GetHeight(e.Graphics) + font.GetHeight(e.Graphics) * (numList.Count) + 22; e.Graphics.DrawLine(pen, new Point((int)left - 2, (int)top + (int)topPoint), new Point((int)left + (int)180, (int)top + (int)topPoint)); //打印时间 string time = "购买时间:" + DateTime.Now.ToString("yyy-MM-dd HH:mm:ss"); e.Graphics.DrawString(time, font, Brushes.Blue, left, top + titlefont.GetHeight(e.Graphics) + font.GetHeight(e.Graphics) * (numList.Count + 1) + 12, new StringFormat()); //二维码图片left和top坐标 int qrcodetop = (int)(top + titlefont.GetHeight(e.Graphics) + font.GetHeight(e.Graphics) * (numList.Count + 3) + 12); int qrcodeleft = (int)left + 32; //生成二维码图片 // Image bmp = QRcodeCreator.GetQRCodeBmp("http://www.xiketang.com/duijiang/query?id=" + serialNum);//直接添加流水号,将来从网站直接查询 Image bmp = QRcodeCreator.GetQRCodeBmp("http://www.xiketang.com"); //打印 e.Graphics.DrawImage(bmp, new Point(qrcodeleft, qrcodetop));//不同的URL图片大小不同,可以根据需要调整left坐标 e.Graphics.DrawString("扫描二维码可直接查询兑奖结果", font, Brushes.Blue, left, qrcodetop + bmp.Height + 10, new StringFormat()); }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

5 在Winform中使用打印功能

public partial class FrmMain : Form { private PrintDocument printDoc = new PrintDocument();//创建打印对象,可以调用方法设定选中的打印机,目前只有一台,所以不需设置 #region 初始化 public FrmMain() { InitializeComponent(); //关联打印对象的事件 this.printDoc.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(this.LotteryPrintPage); } #endregion //使用小票打印机打印 private void btnPrint_Click(object sender, EventArgs e) { this.printDoc.Print(); } //具体打印实现过程 private void LotteryPrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { string serialNum = DateTime.Now.ToString("yyyyMMddHHmmssms");//流水号(生成条码使用) this.objselector.PrintLottery(e, serialNum, objselector.GetPrintedNums());//调用前面编写的打印方法,为了省略代码,objselector.GetPrintedNums()删除了,其返回类型为List<string> } }



该文章在 2022/7/29 9:48:20 编辑过

  离 线  2022/7/29 9:48:19 
  本文章共有 0 页, 0 张回文,每页有 10 张回文 >> [ ]
页码:  
Copyright 2003-2024 ClickSun All Rights Reserved