标签:alt odex 数据 sms oat 区域 调整 convert next
分享一个可以生成条形码,二维码的dll,不多说,直接上代码:
Printer:
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Drawing;
7 using ThoughtWorks.QRCode.Codec;
8
9 namespace PrintFun
10 {
11 public class Printer
12 {
13 private System.Drawing.Printing.PrintPageEventArgs e;
14 private int Top = 20;//提供一个基准Top,用户不提供Top时,就取该Top,每次有内容增加都会刷新
15 private int Left = 20;//提供一个基准Left,用户不提供Left时,就取该Left,每次有内容增加都会刷新
16 private int Interval = 5;//提供一个基准间隔值
17
18 #region 构造函数重载
19 ///
20 /// 打印类
21 /// 所需参数:System.Drawing.Printing.PrintPageEventArgs;第一行内容距左Left值;第一行内容距上Top值;每行内容间隔值
22 /// 默认值:无
23 ///
24 /// 提供打印数据
25 /// 指定第一行数据的x
26 /// 指定第一行数据的y
27 /// 指定每行数据间隔值,默认:20像素
28 public Printer(System.Drawing.Printing.PrintPageEventArgs e, int Left, int Top,int Interval=20)
29 {
30 this.e = e;
31 this.Left = Left;
32 this.Top = Top;
33 this.Interval = Interval;
34 }
35
36 ///
37 /// 打印类
38 /// 所需参数:System.Drawing.Printing.PrintPageEventArgs;每行内容间隔值
39 /// 默认值:第一行内容距左Left值:25像素;第一行内容距上Top值:25像素
40 ///
41 /// 提供打印数据
42 /// 指定每行数据间隔值,默认:20像素
43 public Printer(System.Drawing.Printing.PrintPageEventArgs e, int Interval)
44 {
45 this.e = e;
46 this.Interval = Interval;
47 }
48
49 ///
50 /// 打印类
51 /// 所需参数:System.Drawing.Printing.PrintPageEventArgs
52 /// 默认值:每行内容间隔值:25像素;第一行内容距左Left值:25像素;第一行内容距上Top值:25像素
53 ///
54 /// 提供打印数据
55 public Printer(System.Drawing.Printing.PrintPageEventArgs e)
56 {
57 this.e = e;
58 }
59 #endregion
60
61 #region 根据流水号生成条形码
62
63 ///
64 /// 根据流水号生成条形码
65 /// 所需参数:流水号;距左Left值;距上Top值;条形码宽度;条形码高度
66 /// 默认值:无
67 ///
68 /// 流水号
69 /// 指定条形码x
70 /// 指定条形码y
71 /// 指定条形码宽度,默认值:240像素
72 /// 指定条形码高度,默认值:50像素
73 public void DrawBarCode(string serialNum, int left, int top,int width,int height)
74 {
75 Fath.BarcodeX barCode = new Fath.BarcodeX();//创建条码生成对象
76 //生成条形码
77 barCode.Text = serialNum;//条码数据
78 barCode.Symbology = Fath.bcType.Code128;//设置条码格式
79 barCode.ShowText = true;//同时显示文本
80
81 e.Graphics.DrawImage(barCode.Image(width, height), new Point(left, top));//画条形码
82
83 this.Top += height+this.Interval;//默认相隔20像素
84 }
85
86 ///
87 /// 根据流水号生成条形码
88 /// 所需参数:流水号;距左Left值;距上Top值
89 /// 默认值:条形码宽度:240像素;条形码高度:50像素
90 ///
91 /// 流水号
92 /// 指定条形码x
93 /// 指定条形码y
94 public void DrawBarCode(string serialNum, int left, int top)
95 {
96 Fath.BarcodeX barCode = new Fath.BarcodeX();//创建条码生成对象
97 //生成条形码
98 barCode.Text = serialNum;//条码数据
99 barCode.Symbology = Fath.bcType.Code128;//设置条码格式
100 barCode.ShowText = true;//同时显示文本
101
102 e.Graphics.DrawImage(barCode.Image(240, 50), new Point(left, top));//画条形码
103
104 this.Top += 50+this.Interval;//默认相隔20像素
105 }
106
107 ///
108 /// 根据流水号生成条形码
109 /// 所需参数:流水号
110 /// 默认值:距左Left值:25像素;距上Top值:顺位值;条形码宽度:240像素;条形码高度:50像素
111 ///
112 /// 流水号
113 public void DrawBarCode(string serialNum)
114 {
115 Fath.BarcodeX barCode = new Fath.BarcodeX();//创建条码生成对象
116 //生成条形码
117 barCode.Text = serialNum;//条码数据
118 barCode.Symbology = Fath.bcType.Code128;//设置条码格式
119 barCode.ShowText = true;//同时显示文本
120
121 e.Graphics.DrawImage(barCode.Image(240, 50), new Point(this.Left, this.Top));//画条形码
122
123 this.Top += 50 + this.Interval;//默认相隔20像素
124 }
125
126 #endregion
127
128 #region 根据链接生成二维码
129 ///
130 /// 根据链接获取二维码
131 /// 所需参数:URL;距左Left值;距上Top值
132 /// 默认值:无
133 ///
134 /// 链接135 /// 二维码:x
136 /// 二维码:y
137 /// 返回二维码图片的高度
138 public int DrawQRCodeBmp(string url,int left,int top)
139 {
140 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
141 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
142 qrCodeEncoder.QRCodeScale = 4;
143 qrCodeEncoder.QRCodeVersion = 0;
144 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
145 Image bmp = qrCodeEncoder.Encode(url);
146 e.Graphics.DrawImage(bmp, new Point(left, top));//不同的URL图片大小不同,可以根据需要调整left坐标
147
148 Top += bmp.Height + this.Interval;
149
150 return bmp.Height;
151 }
152
153 ///
154 /// 根据链接获取二维码
155 /// 所需参数:URL;距左Left值
156 /// 默认值:距上Top值:顺位值
157 ///
158 /// 链接159 /// 二维码:x
160 /// 返回二维码图片的高度
161 public int DrawQRCodeBmp(string url, int left)
162 {
163 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
164 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
165 qrCodeEncoder.QRCodeScale = 4;
166 qrCodeEncoder.QRCodeVersion = 0;
167 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
168 Image bmp = qrCodeEncoder.Encode(url);
169 e.Graphics.DrawImage(bmp, new Point(left, this.Top));//不同的URL图片大小不同,可以根据需要调整left坐标
170
171 Top += bmp.Height + this.Interval;
172
173 return bmp.Height;
174 }
175 ///
176 /// 根据链接获取二维码
177 /// 所需参数:URL
178 /// 默认值:距左Left值:25像素;距上Top值:顺位值
179 ///
180 /// 链接
181 ///
182 public int DrawQRCodeBmp(string url)
183 {
184 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
185 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
186 qrCodeEncoder.QRCodeScale = 4;
187 qrCodeEncoder.QRCodeVersion = 0;
188 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
189 Image bmp = qrCodeEncoder.Encode(url);
190 e.Graphics.DrawImage(bmp, new Point(Left, Top));//不同的URL图片大小不同,可以根据需要调整left坐标
191
192 Top += bmp.Height + this.Interval;
193
194 return bmp.Height;
195 }
196 #endregion
197
198 #region 打印内容
199
200 #region 打印单条内容
201 ///
202 /// 打印内容
203 /// 所需参数:打印内容;内容字体;内容字体颜色;距左Left值;距上Top值
204 /// 默认值:无
205 ///
206 /// 需要打印的内容
207 /// 内容字体
208 /// 内容字体颜色,提供Brushes.Color格式
209 /// 打印区域的左边界
210 /// 打印区域的上边界
211 public void DrawContent(string content, Font contentFont, Brush contentBrush, int left , int top )
212 {
213 this.e.Graphics.DrawString(content, contentFont, contentBrush, left, top, new StringFormat());
214
215 Top += Convert.ToInt32(contentFont.GetHeight(e.Graphics)) + this.Interval;
216 }
217
218 ///
219 /// 打印内容
220 /// 所需参数:打印内容;内容字体;内容字体颜色;距左Left值
221 /// 默认值:距上Top值:顺位值
222 ///
223 /// 需要打印的内容
224 /// 内容字体
225 /// 内容字体颜色,提供Brushes.Color格式
226 /// 打印区域的左边界
227 public void DrawContent(string content, Font contentFont, Brush contentBrush, int left)
228 {
229 this.e.Graphics.DrawString(content, contentFont, contentBrush, left, this.Top, new StringFormat());
230
231 Top += Convert.ToInt32(contentFont.GetHeight(e.Graphics)) + this.Interval;
232 }
233
234 ///
235 /// 打印内容
236 /// 所需参数:打印内容;内容字体;内容字体颜色
237 /// 默认值:距左Left值:25像素;距上Top值:顺位值
238 ///
239 /// 需要打印的内容
240 /// 内容字体
241 /// 内容字体颜色,提供Brushes.Color格式
242 public void DrawContent(string content, Font contentFont, Brush contentBrush)
243 {
244 this.e.Graphics.DrawString(content, contentFont, contentBrush, Left, Top, new StringFormat());
245
246 Top += Convert.ToInt32(contentFont.GetHeight(e.Graphics)) + this.Interval;
247 }
248
249 ///
250 /// 打印内容
251 /// 所需参数:打印内容;内容字体
252 /// 默认值:字体:仿宋8号;内容字体颜色:黑色;距左Left值:25像素;距上Top值:顺位值
253 ///
254 /// 需要打印的内容
255 /// 内容字体
256 public void DrawContent(string content, Font contentFont)
257 {
258 this.e.Graphics.DrawString(content, contentFont, Brushes.Black, Left, Top, new StringFormat());
259
260 Top += Convert.ToInt32(contentFont.GetHeight(e.Graphics)) + this.Interval;
261 }
262
263 ///
264 /// 打印内容
265 /// 所需参数:打印内容
266 /// 默认值:字体:仿宋8号;内容字体颜色:黑色;距左Left值:25像素;距上Top值:顺位值
267 ///
268 /// 需要打印的内容
269 /// 内容字体:默认仿宋,8号
270 /// 内容字体颜色:默认黑色
271 public void DrawContent(string content)
272 {
273 Font contentFont = new Font("仿宋", 8);
274 this.e.Graphics.DrawString(content, contentFont, Brushes.Black, Left, Top, new StringFormat());
275
276 Top += Convert.ToInt32(contentFont.GetHeight(e.Graphics)) + this.Interval;
277 }
278 #endregion
279
280 #region 打印多条内容
281
282 ///
283 /// 打印内容
284 /// 所需参数:打印内容集合;内容字体;内容字体颜色;距左Left值;距上Top值
285 /// 默认值:无
286 ///
287 /// 需要打印的内容
288 /// 内容字体
289 /// 内容字体颜色,提供Brushes.Color格式
290 /// 打印区域的左边界
291 /// 打印区域的上边界
292 public void DrawContent(Liststring> contentList, Font contentFont,Brush contentBrush, int left, int top)
293 {
294 int height = Convert.ToInt32(contentFont.GetHeight(e.Graphics));
295 int nextTop = Top + this.Interval;
296 for (int i=0;i)
297 {
298 this.e.Graphics.DrawString(contentList[i], contentFont, contentBrush, left, nextTop , new StringFormat());
299 nextTop += height;
300 }
301 Top += height * contentList.Count + this.Interval + 10;
302 }
303
304 ///
305 /// 打印内容:
306 /// 所需参数:打印内容集合;内容字体;内容字体颜色
307 /// 默认值:距左Left值:25像素;距上Top值:顺位值
308 ///
309 /// 需要打印的内容
310 /// 内容字体
311 /// 内容字体颜色,提供Brushes.Color格式
312 public void DrawContent(Liststring> contentList, Font contentFont, Brush contentBrush)
313 {
314 int height = Convert.ToInt32(contentFont.GetHeight(e.Graphics));
315 int nextTop = Top + this.Interval;
316 for (int i = 0; i )
317 {
318 this.e.Graphics.DrawString(contentList[i], contentFont, contentBrush, Left, nextTop, new StringFormat());
319 nextTop += height;
320 }
321 Top += height * contentList.Count + this.Interval + 10;
322 }
323
324 ///
325 /// 打印内容
326 /// 所需参数:打印内容集合;内容字体
327 /// 默认值:内容字体颜色:黑色;距左Left值:25像素;距上Top值:顺位值
328 ///
329 /// 需要打印的内容
330 /// 内容字体
331 /// 内容字体颜色:默认黑色
332 public void DrawContent(Liststring> contentList, Font contentFont)
333 {
334 int height = Convert.ToInt32(contentFont.GetHeight(e.Graphics));
335 int nextTop = Top + this.Interval;
336 for (int i = 0; i )
337 {
338
339 this.e.Graphics.DrawString(contentList[i], contentFont, Brushes.Black, Left, nextTop, new StringFormat());
340 nextTop += height;
341 }
342 Top += height * contentList.Count + this.Interval + 10;
343 }
344
345 ///
346 /// 打印内容
347 /// 所需参数:打印内容集合
348 /// 默认值:字体:仿宋8号;内容字体颜色:黑色;距左Left值:25像素;距上Top值:顺位值
349 ///
350 /// 需要打印的内容
351 public void DrawContent(Liststring> contentList)
352 {
353 Font contentFont = new Font("仿宋", 8);
354 int height = Convert.ToInt32(contentFont.GetHeight(e.Graphics));
355 int nextTop = Top + this.Interval;
356 for (int i = 0; i )
357 {
358 this.e.Graphics.DrawString(contentList[i], contentFont, Brushes.Black, Left, nextTop, new StringFormat());
359 nextTop += height;
360 }
361 Top += height * contentList.Count + this.Interval + 10;
362 }
363 #endregion
364 #endregion
365
366 #region 分界线
367 ///
368 /// 分界线
369 /// 所需参数:起点Left坐标;起点Top坐标;终点Left坐标;终点Top坐标;线颜色;线宽:1像素
370 /// 默认值:线宽:1像素
371 ///
372 /// 分界线起点,起点与纸张左侧距离
373 /// 分界线起点,起点与纸张上侧距离
374 /// 分界线终点,终点与纸张左侧距离
375 /// 分界线终点,终点与纸张上侧距离
376 /// 分界线颜色
377 /// 分界线宽度,默认值为:1
378 public void DrawDoundary(int startPointLeft, int startPointTop, int endPointLeft, int endPointTop, Color lineColor, int lineWidth = 1)
379 {
380 Pen pen = new Pen(lineColor, lineWidth);
381 e.Graphics.DrawLine(pen, new Point(startPointLeft, startPointTop), new Point(endPointLeft, endPointTop));
382 Top += lineWidth + this.Interval;
383 }
384
385 ///
386 /// 分界线
387 /// 所需参数:起点Left坐标;起点Top坐标;分界线长度;线颜色;线宽:1像素
388 /// 默认值:线宽:1像素
389 ///
390 /// 分界线起点,起点与纸张左侧距离
391 /// 分界线起点,起点与纸张上侧距离
392 /// 分界线长度
393 /// 分界线颜色
394 /// 分界线宽度,默认值为:1
395 public void DrawDoundary(int startPointLeft, int startPointTop, int lineLength, Color lineColor, int lineWidth = 1)
396 {
397 Pen pen = new Pen(lineColor, lineWidth);
398 e.Graphics.DrawLine(pen, new Point(startPointLeft, startPointTop), new Point(startPointLeft+lineLength, startPointTop));
399 Top += lineWidth + this.Interval;
400 }
401
402 ///
403 /// 分界线
404 /// 所需参数:分界线长度;线颜色;线宽:1像素
405 /// 默认值:距上Top值:顺位值;线宽:1像素
406 ///
407 /// 分界线长度
408 /// 分界线颜色
409 /// 分界线宽度,默认值为:1
410 public void DrawDoundary(int lineLength, Color lineColor, int lineWidth = 1)
411 {
412 Pen pen = new Pen(lineColor, lineWidth);
413 e.Graphics.DrawLine(pen, new Point(Left, Top), new Point(Left + lineLength, Top));
414 Top += lineWidth + this.Interval;
415 }
416
417 ///
418 /// 分界线
419 /// 所需参数:分界线长度;线宽:1像素
420 /// 默认值:距左Left值:25像素;距上Top值:顺位值;线宽:1像素
421 ///
422 /// 分界线长度
423 /// 分界线宽度,默认值为:1
424 public void DrawDoundary(int lineLength, int lineWidth = 1)
425 {
426 Pen pen = new Pen(Color.Green, lineWidth);
427 e.Graphics.DrawLine(pen, new Point(Left, Top), new Point(Left + lineLength, Top));
428 Top += lineWidth + this.Interval;
429 }
430
431 ///
432 /// 分界线
433 /// 所需参数:起点Left坐标;终点Left坐标;线宽:1像素
434 /// 默认值:距上Top值:顺位值;线颜色:绿色;线宽:1像素
435 ///
436 /// 开始点
437 /// 结束点
438 /// 线宽:默认1像素
439 /// 分界线颜色:默认绿色
440 public void DrawDoundary(int startPointLeft,int endPointLeft, int lineWidth = 1)
441 {
442 Pen pen = new Pen(Color.Green, lineWidth);
443 e.Graphics.DrawLine(pen, new Point(startPointLeft, Top), new Point(endPointLeft, Top));
444 Top += lineWidth + this.Interval;
445 }
446
447 ///
448 /// 分界线
449 /// 所需参数:起点Left坐标;终点Left坐标;线颜色;线宽:1像素
450 /// 默认值:距上Top值:顺位值;线宽:1像素
451 ///
452 /// 开始点
453 /// 结束点
454 /// 线宽:默认1像素
455 /// 分界线颜色
456 public void DrawDoundary(int startPointLeft, int endPointLeft, Color lineColor, int lineWidth = 1)
457 {
458 Pen pen = new Pen(lineColor, lineWidth);
459 e.Graphics.DrawLine(pen, new Point(startPointLeft, Top), new Point(endPointLeft, Top));
460 Top += lineWidth + this.Interval;
461 }
462 #endregion
463 }
464 }
View Code
测试:
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 using PrintFun;
12
13 namespace PrintDemo
14 {
15 public partial class Form1 : Form
16 {
17 public Form1()
18 {
19 InitializeComponent();
20
21