C# 利用PrintDocument定制打印单据
本文是利用PrintDocument定制打印单据的小例子,仅供学习分享使用,如果不足之处,还请指正。
涉及知识点:
- PrintDocument :从 Windows 窗体应用程序打印时,定义一种可重用的可发送到打印机上的对象。
- PrintPreviewControl :表示 Windows 窗体应用程序打印预览的原始预览部分,没有任何对话框或按钮。
- Graphics :GDI+绘图对象
- PrinterSettings:设置打印机属性,如:设置属性Copies,可以设置打印份数,默认为1,
- PageSettings:指定应用于单页打印的设置
- DefaultPageSettings:PrintDocument的属性
- PrintPage事件:PrintDocument的事件,通过此事件来绘制需要打印的内容
- PaperSize:指定纸张大小
- 毫米和英寸的换算:打印机是以英寸为单位的,单据设置是以毫米为单位的,所以需要转换
效果图如下:
核心代码
关键代码如下:
![](/assets/blank.gif)
![](/assets/blank.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Drawing.Printing; 7 using System.Linq; 8 using System.Text; 9 using System.Threading.Tasks; 10 using System.Windows.Forms; 11 12 namespace DemoPrint 13 { 14 public partial class MainForm : Form 15 { 16 private int width_p = 200;//单位是mm 17 18 private int height_p = 70;//单位是mm 19 20 private int margin_lr = 2;//左右边距 21 22 private int margin_tb = 2;//上下边距 23 24 /// <summary> 25 /// 需要打印的内容 26 /// </summary> 27 public List<PrintInfo> PrintInfos { get; set; } 28 29 private PrintHelper printHelper = new PrintHelper(); 30 31 public MainForm() 32 { 33 InitializeComponent(); 34 } 35 36 private void MainForm_Load(object sender, EventArgs e) 37 { 38 InitInfo(); 39 InitDocument(); 40 } 41 42 private void InitInfo() { 43 PrinterSettings printSetting = new PrinterSettings(); 44 printSetting.PrintRange = PrintRange.AllPages; 45 46 47 int width_in = MM2Inch(width_p); 48 int height_in = MM2Inch(height_p); 49 PageSettings pageSetting = new PageSettings(printSetting); 50 pageSetting.PaperSize = new PaperSize("customer",width_in, height_in); 51 52 int margin_lr_in = MM2Inch(margin_lr); 53 int margin_tb_in = MM2Inch(margin_tb); 54 pageSetting.Margins = new Margins(margin_lr_in, margin_lr_in, margin_tb_in, margin_tb_in); 55 this.pdControl.DefaultPageSettings = pageSetting; 56 } 57 58 private void InitDocument() { 59 List<PrintInfo> lstPrintInfos = new List<PrintInfo>(); 60 PrintInfo p0 = new PrintInfo() 61 { 62 PrtType = PrintType.Table, 63 PrtColor = Color.Brown, 64 Row = int.Parse(this.txtRow.Text.Trim()), 65 Column = int.Parse(this.txtColumn.Text.Trim()), 66 Start = new Point(int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[1])), 67 End = new Point(int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[1])) 68 69 }; 70 lstPrintInfos.Add(p0); 71 printHelper.PrintInfos = lstPrintInfos; 72 } 73 74 /// <summary> 75 /// 转换毫米到百分之一英寸 76 /// </summary> 77 /// <param name="mm"></param> 78 /// <returns></returns> 79 private int MM2Inch(int mm) { 80 return (int)(mm * 100.0f / 25.4f); 81 } 82 83 /// <summary> 84 /// 打印开始事件 85 /// </summary> 86 /// <param name="sender"></param> 87 /// <param name="e"></param> 88 private void pdControl_BeginPrint(object sender, PrintEventArgs e) 89 { 90 91 } 92 93 /// <summary> 94 /// 打印事件 95 /// </summary> 96 /// <param name="sender"></param> 97 /// <param name="e"></param> 98 private void pdControl_PrintPage(object sender, PrintPageEventArgs e) 99 { 100 Font font = new Font("Arial", 14f, FontStyle.Regular); 101 Graphics g = e.Graphics; 102 g.PageScale = 1; 103 g.PageUnit = GraphicsUnit.Millimeter; 104 //先画一个矩形 105 Pen lineColor = new Pen(Color.Black, 0.2f); 106 g.FillRectangle(Brushes.Linen,0,0,width_p,height_p); 107 printHelper.Print(g); 108 } 109 110 /// <summary> 111 /// 打印结束事件 112 /// </summary> 113 /// <param name="sender"></param> 114 /// <param name="e"></param> 115 private void pdControl_EndPrint(object sender, PrintEventArgs e) 116 { 117 118 } 119 120 121 /// <summary> 122 /// 打印 123 /// </summary> 124 /// <param name="sender"></param> 125 /// <param name="e"></param> 126 private void btnPrint_Click(object sender, EventArgs e) 127 { 128 //打印对话框 129 if (this.ptDControl.ShowDialog() == DialogResult.OK) 130 { 131 this.pdControl.Print(); 132 } 133 134 } 135 136 private void lblColor_Click(object sender, EventArgs e) 137 { 138 ColorDialog f = new ColorDialog(); 139 if (f.ShowDialog() == DialogResult.OK) 140 { 141 142 this.lblColor.BackColor = f.Color; 143 } 144 } 145 146 /// <summary> 147 /// 刷新 148 /// </summary> 149 /// <param name="sender"></param> 150 /// <param name="e"></param> 151 private void btnRefresh_Click(object sender, EventArgs e) 152 { 153 List<PrintInfo> lstPrintInfos = new List<PrintInfo>(); 154 //表格配置 155 PrintInfo p0 = new PrintInfo() 156 { 157 PrtType = PrintType.Table, 158 PrtColor = Color.Brown, 159 Row = int.Parse(this.txtRow.Text.Trim()), 160 Column = int.Parse(this.txtColumn.Text.Trim()), 161 Start = new Point(int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtStart.Text.Trim(new char[] { '(', ')' }).Split(',')[1])), 162 End = new Point(int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtEnd.Text.Trim(new char[] { '(', ')' }).Split(',')[1])) 163 164 }; 165 lstPrintInfos.Add(p0); 166 //标题配置 167 PrintInfo p1 = new PrintInfo() 168 { 169 PrtType = PrintType.Text, 170 PrtColor = this.lblColor.BackColor, 171 Content = this.txtTitle.Text.Trim(), 172 Size = int.Parse(this.txtSize.Text.Trim()), 173 FontStyle = chkBold.Checked ? FontStyle.Bold : FontStyle.Regular, 174 Start = new Point(int.Parse(this.txtLocation.Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(this.txtLocation.Text.Trim(new char[] { '(', ')' }).Split(',')[1])) 175 }; 176 lstPrintInfos.Add(p1); 177 //内容 178 TextBox[] T = new TextBox[12] { T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 }; 179 TextBox[] L = new TextBox[12] { L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12 }; 180 for (int i = 0; i < 12; i++) 181 { 182 PrintInfo p = new PrintInfo() 183 { 184 PrtType = PrintType.Text, 185 PrtColor = Color.Black, 186 Content = T[i].Text.Trim(), 187 Size = 12, 188 FontStyle = FontStyle.Regular, 189 Start = new Point(int.Parse(L[i].Text.Trim(new char[] { '(', ')' }).Split(',')[0]), int.Parse(L[i].Text.Trim(new char[] { '(', ')' }).Split(',')[1])) 190 }; 191 lstPrintInfos.Add(p); 192 } 193 //打印时间 194 PrintInfo p2 = new PrintInfo() 195 { 196 PrtType = PrintType.Text, 197 PrtColor = this.lblColor.BackColor, 198 Content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), 199 Size =11, 200 FontStyle =FontStyle.Regular, 201 Start = new Point(145,63) 202 }; 203 lstPrintInfos.Add(p2); 204 205 printHelper.PrintInfos = lstPrintInfos; 206 this.ppVControl.InvalidatePreview();//刷新文档的预览,重新调用PrintDocument的Print方法 207 } 208 } 209 }
View Code
源码链接
转载于:https://www.cnblogs.com/hsiang/p/6921817.html
C# 利用PrintDocument定制打印单据相关推荐
- php批量打印快递单,excel怎么利用vba实现批量套打快递单批量打印单据?
excel vba 批量套打快递单,批量打印单据,可以自定义修改设置新的格式. 快递套打模板2015:点击下载 1.设置快递单的自定义纸张.选择对应打印机-点击打印服务器属性-勾选创建新表单-输入表单 ...
- System verilog利用class类打印信息
1.1 System verilog利用class类打印信息 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)System verilog利用class类打印信息: 5) ...
- 利用PL/SQL打印ASCII表?
利用PL/SQL打印ASCII表? 系统环境: 1.操作系统:Windows 2000 2.数据库: Oracle 8i R2 (8.1.6) for NT 企业版 3.安装路径:C:\ORACLE ...
- 天联高级版客户端_天联客户端登录的KIS旗舰版打印单据问题
如何解决天联客户端登录的KIS旗舰版打印单据问题 用户通过天联高级客户端访问服务器端的KIS旗舰版,但是反应两边单据打印出来的结果不一致,现在以KIS旗舰版打印外购入库单为例具体介绍一下如何操作 1. ...
- python画图代码星星-Python利用for循环打印星号三角形的案例
简单的for循环打印三角形 1,for循环方法实现星星三角 代码: for i in range(0,5): for j in range(i+1): if i == 4: print("* ...
- java使用三种循环打印99表_编程题:利用for循环打印 9*9 表
# 利用for循环打印 9*9 表? 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 ...
- K3打印单据,提示:等待C盘释放空间,内存不足
K3打印单据,提示:等待C盘释放空间,内存不足 今天采购部同事碰到一个问题, 在打结算单时,提示要等待C盘释放空间. 像这种错误, 大家都觉得自己C盘还有好大的空间,怎么会有如此错误. 其实电脑在交互 ...
- 利用for循环打印图形
利用for循环打印图形 利用for循环打印图形时,我们需要记住外层循环列,内层循环行,然后们需要做的不外乎是找到它们循环的规律罢了. 打印矩形图形 打印: ***** ***** ***** **** ...
- 6.2_[Java 数组]-利用二重循环打印各种图形
################################################## 目录 玩坏二重循环 一句话概括二重循环 打印一个矩形 打印正直角三角形左下角顶点 打印倒直角三角形 ...
最新文章
- 怎么编写段错误(Segmentation fault)的程序
- JSBinding+SharpKit / 菜单介绍
- 如何将Pytorch生成的模型进行CPU部署
- [今日干货]短视频获得种子用户的途径
- JFreeChart(五)之XY图
- [转载] Python3 数组
- ajax编写前台的时候,列表显示部分,表格显示不出来,但是可以获取到数据
- jquery获取div/div之间的内容.text() 和 .html()区别
- TCP协议疑难杂症全景解析
- python记录(4)- lxml模块创建xml文件
- [Linux 性能检测工具]IOSTAT
- 多家大厂的存储设备受第三方加密软件缺陷影响
- Oracle-数据库
- 十八、vim进入编辑模式、vim命令模式、vim实践
- RCC_APB2Periph_AFIO的理解。。。重映射的一点心得
- node - 收藏集 - 掘金
- 【探索HTML5第二弹03】走近地图应用的世界,看我们google地图可以看些什么!
- 高新计算机考试试题ps,最新版计算机高新考试ps第1单元1-8.pdf
- java socket 打印机_socket.BeginReceive()使打印机无响应
- 电脑配置低用不了PS怎么办?你需要网页版ps!