您好,登录后才能下订单哦!
本篇内容介绍了“C#怎么利用PrintDocument定制打印单据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
前言
本文是利用PrintDocument定制打印单据的小例子,仅供学习分享使用,如果不足之处,还请指正。
涉及知识点:
PrintDocument :从 Windows 窗体应用程序打印时,定义一种可重用的可发送到打印机上的对象。 PrintPreviewControl :表示 Windows 窗体应用程序打印预览的原始预览部分,没有任何对话框或按钮。 Graphics :GDI+绘图对象 PrinterSettings:设置打印机属性,如:设置属性Copies,可以设置打印份数,默认为1, PageSettings:指定应用于单页打印的设置 DefaultPageSettings:PrintDocument的属性 PrintPage事件:PrintDocument的事件,通过此事件来绘制需要打印的内容 PaperSize:指定纸张大小 毫米和英寸的换算:打印机是以英寸为单位的,单据设置是以毫米为单位的,所以需要转换
效果图如下:
核心代码
关键代码如下:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Drawing.Printing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace DemoPrint{ public partial class MainForm : Form { private int width_p = 200;//单位是mm private int height_p = 70;//单位是mm private int margin_lr = 2;//左右边距 private int margin_tb = 2;//上下边距 /// <summary> /// 需要打印的内容 /// </summary> public List<PrintInfo> PrintInfos { get; set; } private PrintHelper printHelper = new PrintHelper(); public MainForm() { InitializeComponent(); } private void MainForm_Load(object sender, EventArgs e) { InitInfo(); InitDocument(); } private void InitInfo() { PrinterSettings printSetting = new PrinterSettings(); printSetting.PrintRange = PrintRange.AllPages; int width_in = MM2Inch(width_p); int height_in = MM2Inch(height_p); PageSettings pageSetting = new PageSettings(printSetting); pageSetting.PaperSize = new PaperSize("customer",width_in, height_in); int margin_lr_in = MM2Inch(margin_lr); int margin_tb_in = MM2Inch(margin_tb); pageSetting.Margins = new Margins(margin_lr_in, margin_lr_in, margin_tb_in, margin_tb_in); this.pdControl.DefaultPageSettings = pageSetting; } private void InitDocument() { List<PrintInfo> lstPrintInfos = new List<PrintInfo>(); PrintInfo p0 = new PrintInfo() { PrtType = PrintType.Table, PrtColor = Color.Brown, Row = int.Parse(this.txtRow.Text.Trim()), Column = int.Parse(this.txtColumn.Text.Trim()), Start = new Point(int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[1])), End = new Point(int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[1])) }; lstPrintInfos.Add(p0); printHelper.PrintInfos = lstPrintInfos; } /// <summary> /// 转换毫米到百分之一英寸 /// </summary> /// <param name="mm"></param> /// <returns></returns> private int MM2Inch(int mm) { return (int)(mm * 100.0f / 25.4f); } /// <summary> /// 打印开始事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pdControl_BeginPrint(object sender, PrintEventArgs e) { } /// <summary> /// 打印事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pdControl_PrintPage(object sender, PrintPageEventArgs e) { Font font = new Font("Arial", 14f, FontStyle.Regular); Graphics g = e.Graphics; g.PageScale = 1; g.PageUnit = GraphicsUnit.Millimeter; //先画一个矩形 Pen lineColor = new Pen(Color.Black, 0.2f); g.FillRectangle(Brushes.Linen,0,0,width_p,height_p); printHelper.Print(g); } /// <summary> /// 打印结束事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pdControl_EndPrint(object sender, PrintEventArgs e) { } /// <summary> /// 打印 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnPrint_Click(object sender, EventArgs e) { //打印对话框 if (this.ptDControl.ShowDialog() == DialogResult.OK) { this.pdControl.Print(); } } private void lblColor_Click(object sender, EventArgs e) { ColorDialog f = new ColorDialog(); if (f.ShowDialog() == DialogResult.OK) { this.lblColor.BackColor = f.Color; } } /// <summary> /// 刷新 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRefresh_Click(object sender, EventArgs e) { List<PrintInfo> lstPrintInfos = new List<PrintInfo>(); //表格配置 PrintInfo p0 = new PrintInfo() { PrtType = PrintType.Table, PrtColor = Color.Brown, Row = int.Parse(this.txtRow.Text.Trim()), Column = int.Parse(this.txtColumn.Text.Trim()), Start = new Point(int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[1])), End = new Point(int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[1])) }; lstPrintInfos.Add(p0); //标题配置 PrintInfo p1 = new PrintInfo() { PrtType = PrintType.Text, PrtColor = this.lblColor.BackColor, Content = this.txtTitle.Text.Trim(), Size = int.Parse(this.txtSize.Text.Trim()), FontStyle = chkBold.Checked ? FontStyle.Bold : FontStyle.Regular, Start = new Point(int.Parse(this.txtLocation.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtLocation.Text.Trim(new char[] { '(', ')' }).Split(',')[1])) }; lstPrintInfos.Add(p1); //内容 TextBox[] T = new TextBox[12] { T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 }; TextBox[] L = new TextBox[12] { L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12 }; for (int i = 0; i < 12; i++) { PrintInfo p = new PrintInfo() { PrtType = PrintType.Text, PrtColor = Color.Black, Content = T[i].Text.Trim(), Size = 12, FontStyle = FontStyle.Regular, Start = new Point(int.Parse(L[i].Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(L[i].Text.Trim(new char[] { '(', ')' }).Split(',')[1])) }; lstPrintInfos.Add(p); } //打印时间 PrintInfo p2 = new PrintInfo() { PrtType = PrintType.Text, PrtColor = this.lblColor.BackColor, Content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), Size =11, FontStyle =FontStyle.Regular, Start = new Point(145,63) }; lstPrintInfos.Add(p2); printHelper.PrintInfos = lstPrintInfos; this.ppVControl.InvalidatePreview();//刷新文档的预览,重新调用PrintDocument的Print方法 } }}
“C#怎么利用PrintDocument定制打印单据”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。