C# 实现小票打印

时间:2022-09-11 08:00:13
我现在可以用C#实现 小票打印,但是想 实现可以设置每行打印内容字体大小,颜色等??字体不一样。
请帮忙解决下. 
谢谢,如图:打印效果图: C# 实现小票打印

8 个解决方案

#1



public bool Print()
         {
             bool bolIsSuccess = false;
             PrintDocument pd = new PrintDocument();

             PaperSize ps = new PaperSize("Measure", 350, 650);
             pd.DefaultPageSettings.PaperSize = ps;
             pd.DefaultPageSettings.PrinterSettings.Copies = 1;
             pd.DefaultPageSettings.PrinterSettings.MaximumPage = 1;
             pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
             pd.Print();
             bolIsSuccess = true;
             return bolIsSuccess;
         }

      void pd_PrintPage(object sender, PrintPageEventArgs e)
         {
             Font titleFont = new Font("宋体", 14, FontStyle.Bold);//标题字体 
             Font fntTxt = new Font("宋体", 12, FontStyle.Regular);//正文文字 
             Brush brush = new SolidBrush(Color.Black);//画刷 
             Pen pen = new Pen(Color.Black);           //线条颜色 
             Point poTitle = new Point(40, 200);
             Point poTime = new Point(70, 210);
             Point poTxt = new Point(20, 235);
             StringBuilder sb = GetPrintSW();

             string strTime = DateTime.Now.Year.ToString() + "年" + DateTime.Now.Month.ToString() + "月" + DateTime.Now.Day.ToString() + "日   " + DateTime.Now.ToString("HH:mm:ss");
             try
             {
                 e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\nXXXXXXX计量单", fntTxt, new SolidBrush(Color.White), new Point(45,100));
                 e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\nXXXXXXXX计量单", fntTxt, brush, poTitle);
                 e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\n\r\n"+strTime, fntTxt, brush, poTime);
                 e.Graphics.DrawString(sb.ToString(), fntTxt, brush, poTxt);   //DrawString方式进行打印。 

                 if (dt.Rows.Count > 0)
                 {
                     string strMeaDocId = dt.Rows[0]["C_MeasureDocID"].ToString() ?? "";
                     if (!string.IsNullOrEmpty(strMeaDocId))
                     {
                         barcodeControl.Data = strMeaDocId;
                     }
                 }
                 barcodeControl.CopyRight = "";
                 BarcodeType bt = BarcodeType.CODE39;
                 barcodeControl.BarcodeType = bt;
                 Graphics g = e.Graphics;
                 Rectangle rect = barcodeControl.ClientRectangle;
                 rect = new Rectangle(90, 550, 230, 50);
                 //打印
                 barcodeControl.Draw(g, rect, GraphicsUnit.Inch, 0.01f, 0, null);
                 g.Dispose();

             }
             catch (Exception ex)
             {
                 SaveLog.SaveErrLog("打印小票出错:"+ex.Message);
                 return;
             }
         }

#2


这个是一行一行自动换行文本,是否可以首先定义打印模板每行字体大小,颜色,然后把数据传入打印模板中,然后再打印,可以指定打印机打印。

#3


可以啊,用DevExpress的报表可视化设计工具就可以了。

#4


尽量不用第三方控件,比如水晶报表,Dev等第三方控件. 用微软PrintDocument自带打印。
谢谢

#5


C# 实现小票打印
不用第三方,那你自己画呗,把他画成一张图片就可以了

#6


嗯,怎么去画,假设我打印信息有30行,那要画30次,这样是不是很繁琐了,有没有批量画文本,然后生成一张图片打印。

#7


批量生成文本的方法是你自己写的
从数据库获取到数据后,将要打印的数据放到一个StringBuilder中,最后统一生成打印用的字符串
将这个字符串作为参数生成图片

#8


引用 6 楼 yxiang_521 的回复:
嗯,怎么去画,假设我打印信息有30行,那要画30次,这样是不是很繁琐了,有没有批量画文本,然后生成一张图片打印。

你不会用 \r\n 换行么?。。。

#1



public bool Print()
         {
             bool bolIsSuccess = false;
             PrintDocument pd = new PrintDocument();

             PaperSize ps = new PaperSize("Measure", 350, 650);
             pd.DefaultPageSettings.PaperSize = ps;
             pd.DefaultPageSettings.PrinterSettings.Copies = 1;
             pd.DefaultPageSettings.PrinterSettings.MaximumPage = 1;
             pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
             pd.Print();
             bolIsSuccess = true;
             return bolIsSuccess;
         }

      void pd_PrintPage(object sender, PrintPageEventArgs e)
         {
             Font titleFont = new Font("宋体", 14, FontStyle.Bold);//标题字体 
             Font fntTxt = new Font("宋体", 12, FontStyle.Regular);//正文文字 
             Brush brush = new SolidBrush(Color.Black);//画刷 
             Pen pen = new Pen(Color.Black);           //线条颜色 
             Point poTitle = new Point(40, 200);
             Point poTime = new Point(70, 210);
             Point poTxt = new Point(20, 235);
             StringBuilder sb = GetPrintSW();

             string strTime = DateTime.Now.Year.ToString() + "年" + DateTime.Now.Month.ToString() + "月" + DateTime.Now.Day.ToString() + "日   " + DateTime.Now.ToString("HH:mm:ss");
             try
             {
                 e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\nXXXXXXX计量单", fntTxt, new SolidBrush(Color.White), new Point(45,100));
                 e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\nXXXXXXXX计量单", fntTxt, brush, poTitle);
                 e.Graphics.DrawString("\r\n\r\n\r\n\r\n\r\n\r\n\r\n"+strTime, fntTxt, brush, poTime);
                 e.Graphics.DrawString(sb.ToString(), fntTxt, brush, poTxt);   //DrawString方式进行打印。 

                 if (dt.Rows.Count > 0)
                 {
                     string strMeaDocId = dt.Rows[0]["C_MeasureDocID"].ToString() ?? "";
                     if (!string.IsNullOrEmpty(strMeaDocId))
                     {
                         barcodeControl.Data = strMeaDocId;
                     }
                 }
                 barcodeControl.CopyRight = "";
                 BarcodeType bt = BarcodeType.CODE39;
                 barcodeControl.BarcodeType = bt;
                 Graphics g = e.Graphics;
                 Rectangle rect = barcodeControl.ClientRectangle;
                 rect = new Rectangle(90, 550, 230, 50);
                 //打印
                 barcodeControl.Draw(g, rect, GraphicsUnit.Inch, 0.01f, 0, null);
                 g.Dispose();

             }
             catch (Exception ex)
             {
                 SaveLog.SaveErrLog("打印小票出错:"+ex.Message);
                 return;
             }
         }

#2


这个是一行一行自动换行文本,是否可以首先定义打印模板每行字体大小,颜色,然后把数据传入打印模板中,然后再打印,可以指定打印机打印。

#3


可以啊,用DevExpress的报表可视化设计工具就可以了。

#4


尽量不用第三方控件,比如水晶报表,Dev等第三方控件. 用微软PrintDocument自带打印。
谢谢

#5


C# 实现小票打印
不用第三方,那你自己画呗,把他画成一张图片就可以了

#6


嗯,怎么去画,假设我打印信息有30行,那要画30次,这样是不是很繁琐了,有没有批量画文本,然后生成一张图片打印。

#7


批量生成文本的方法是你自己写的
从数据库获取到数据后,将要打印的数据放到一个StringBuilder中,最后统一生成打印用的字符串
将这个字符串作为参数生成图片

#8


引用 6 楼 yxiang_521 的回复:
嗯,怎么去画,假设我打印信息有30行,那要画30次,这样是不是很繁琐了,有没有批量画文本,然后生成一张图片打印。

你不会用 \r\n 换行么?。。。