C#封装一个打印公共类的简单方法.doc_第1页
C#封装一个打印公共类的简单方法.doc_第2页
C#封装一个打印公共类的简单方法.doc_第3页
C#封装一个打印公共类的简单方法.doc_第4页
C#封装一个打印公共类的简单方法.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机交流平台:计算机故障_计算机论坛 wyC#封装一个打印公共类的简单方法ImagePrinter 类是封装好的打印类,打印前需要调用 public bool PrinterReady(Bitmap printContent) 方法传入一个图片文件,之后就可以调用 PrintView() 进行打印浏览,调用 PrintOut() 就可以打印了。ExpressPrinter 类是调用 ImagePrinter 打印封装类的一个实例,旨在与看看怎么使用GDI+绘制需要打印的内容和字体。=using System;using System.Collections.Generic;using System.Drawing.Imaging;using System.Linq;using System.Text;using System.Drawing;using System.Windows.Forms;using System.Drawing.Printing;using Lib.Biz.ClientService;using Lib.Utility.Extension;using PrintOrder.Utility;namespace PrintOrder.ExpressPrinter.PrintDoc/ / 打印图片内容/ public class ExpressPrinter/ / 创建快递单打印对象实例/ / 打印机名称,如果为空将使用默认打印机/ 打印模板/ 打印项/ 是否打印定位标尺public ExpressPrinter(string printerName, Print_Template template, List items, bool isCoordinateRule)m_template = template;m_items = items;m_print = new ImagePrinter(printerName);m_isCoordinateRule = isCoordinateRule;InitPrinter();#region 变量private Print_Template m_template;private List m_items;private Bitmap m_bitmap = new Bitmap(10, 10);private Brush m_brush = new SolidBrush(Color.Black);private ImagePrinter m_print = null;private bool m_isCoordinateRule = false;#endregion/ / 设置纸张大小/ private void SetPrintPageSize()/使用百分之一英寸为单位重新创建绘图图面using (Graphics g = Graphics.FromImage(m_bitmap)/注:使用百分之一为单位SizeF sizeF = new SizeF(CommonMethod.PixelsToInches(m_template.Width,g.DpiX)*100,CommonMethod.PixelsToInches(m_template.Height,g.DpiY)*100);Size size = Size.Ceiling(sizeF);m_print.DefaultPaperSize = new PaperSize(NewPage, size.Width,size.Height);m_print.DefaultMargins = new Margins(0, 0, 0, 0);m_print.PrintDocName = string.Format(0(1),m_template.TemplateName,m_template.Modifier);/ / 打印前初始化/ private void InitPrinter()SetPrintPageSize(); /设置纸张大小m_bitmap = new Bitmap(m_template.Width, m_template.Height);Func getFont = (o =FontStyle fontStyle = FontStyle.Regular;if (o.FontBold = 1)fontStyle = fontStyle | FontStyle.Bold;if (o.FontItalic = 1)fontStyle = fontStyle | FontStyle.Italic;if (o.FontStrikeout = 1)fontStyle = fontStyle | FontStyle.Strikeout;if (o.FontUnderline = 1)fontStyle = fontStyle | FontStyle.Underline;Font font = new Font(o.FontName, o.FontSize, fontStyle);return font;);using (Graphics g = Graphics.FromImage(m_bitmap)g.PageUnit = GraphicsUnit.Pixel;/填充数据到图片模板(位置要在制作图片模板的时候度量好)g.FillRectangle(Brushes.White, 0f, 0f,m_template.Width,m_template.Height);/测试纸张大小/this.DrawTestRectangle(g);if (m_isCoordinateRule)TestPageSize(g);foreach (Print_Item item in m_items)g.DrawString(item.Text, getFont(item), Brushes.Black, new RectangleF(item.Offset_X + m_template.Offset_X /设置全局打印偏移 X 坐标,item.Offset_Y + m_template.Offset_Y /设置全局打印偏移 Y 坐标,item.Width,item.Height);g.Dispose();/m_bitmap.Save(D:WorkTesttempexpress.jpg);m_print.PrinterReady(m_bitmap);private void DrawTestRectangle(Graphics g)g.PageUnit = GraphicsUnit.Pixel;SizeF size = new SizeF(Utility.CommonMethod.MillimetersToPixel(30, g.DpiX), Utility.CommonMethod.MillimetersToPixel(30, g.DpiY);g.DrawRectangle(new Pen(Color.Black, 1), 50, 50, size.Width, size.Height);/ / 打印标尺/ private void TestPageSize(Graphics g)g.PageUnit = GraphicsUnit.Pixel;/八个定位方格Size size = new Size(20,20);Point ltop = new Point(0,0);Point rtop = new Point(m_template.Width - size.Width, 0);Point ldwn = new Point(0,m_template.Height - size.Height);Point rdwn = new Point(m_template.Width - size.Width, m_template.Height - size.Height);Point tmdio = new Point(m_template.Width/2-size.Width/2,0);Point dmdio = new Point(m_template.Width / 2 - size.Width/ 2, m_template.Height - size.Height);Point lmdio = new Point(0, m_template.Height / 2 - size.Height / 2);Point rmdio = new Point(m_template.Width - size.Width, m_template.Height / 2 - size.Height / 2);/Point mdio = new Point(m_template.Width / 2 - size.Width / 2, m_template.Height / 2 - size.Height / 2);/左下和右上的限度矩形Size tRec = new Size(m_template.Width/4,10);Size lRec = new Size(10, m_template.Height / 4);Point ldRec = new Point(0, lmdio.Y + size.Height + lRec.Height);/左下Point rtRec = new Point(tmdio.X + size.Width + tRec.Width, 0);/右上/十字中心Size tdCrossSize = new Size(10,50);Size lrCrossSize = new Size(50,10);Point tdCrossPnt = new Point(m_template.Width / 2 - tdCrossSize.Width / 2, m_template.Height / 2 - tdCrossSize.Height/2);Point lrCrossPnt = new Point(m_template.Width / 2 - lrCrossSize.Width / 2, m_template.Height / 2 - lrCrossSize.Height / 2);g.FillRectangle(m_brush, new Rectangle(ltop, size);g.FillRectangle(m_brush, new Rectangle(rtop, size);g.FillRectangle(m_brush, new Rectangle(ldwn, size);g.FillRectangle(m_brush, new Rectangle(rdwn, size);g.FillRectangle(m_brush, new Rectangle(tmdio, size);g.FillRectangle(m_brush, new Rectangle(dmdio, size);g.FillRectangle(m_brush, new Rectangle(lmdio, size);g.FillRectangle(m_brush, new Rectangle(rmdio, size);g.FillRectangle(m_brush, new Rectangle(rtRec, tRec);g.FillRectangle(m_brush, new Rectangle(ldRec, lRec);g.FillRectangle(m_brush, new Rectangle(tdCrossPnt, tdCrossSize);g.FillRectangle(m_brush, new Rectangle(lrCrossPnt, lrCrossSize);string defaultSize = string.Format(纸张:0X1(px),2X3(mm), CommonMethod.InchesToPixels(m_print.DefaultPaperSize.Width / 100f,g.DpiX), CommonMethod.InchesToPixels(m_print.DefaultPaperSize.Height / 100f, g.DpiY), CommonMethod.PixelToMillimeters(m_print.DefaultPaperSize.Width,g.DpiX), CommonMethod.PixelToMillimeters(m_print.DefaultPaperSize.Height, g.DpiY);g.DrawString(defaultSize,new Font(宋体,9), m_brush,50,50);string defaultMargin = string.Format(页边距:上=0,下=1,左=2,右=3, CommonMethod.InchesToPixels(m_print.DefaultMargins.Top, g.DpiY), CommonMethod.InchesToPixels(m_print.DefaultMargins.Bottom, g.DpiY), CommonMethod.InchesToPixels(m_print.DefaultMargins.Left/ 100f,g.DpiX), CommonMethod.InchesToPixels(m_print.DefaultMargins.Right/ 100f,g.DpiX);g.DrawString(defaultMargin, new Font(宋体, 12), m_brush, 50, 70);string lrCrossStr = string.Format(左右各0毫米, CommonMethod.PixelToMillimeters(m_template.Width / 2F, g.DpiX);g.DrawString(lrCrossStr, new Font(宋体, 12), m_brush, m_print.DefaultPaperSize.Width / 3F, m_print.DefaultPaperSize.Height / 2 + 30);string tdCrossStr = string.Format(上下各0毫米, CommonMethod.PixelToMillimeters(m_template.Height / 2F, g.DpiY);g.DrawString(tdCrossStr, new Font(宋体, 12), m_brush, m_print.DefaultPaperSize.Width / 3F, m_print.DefaultPaperSize.Height / 2 + 45);#region 公共方法/ / 打印预览/ / public DialogResult PrintProview()return m_print.PrintView();/ / 开始打印/ public void PrintOut()m_print.PrintOut();#endregion=using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Drawing;using System.Windows.Forms;using System.Drawing.Printing;using Lib.Utility.Extension;using PrintOrder.Utility;namespace PrintOrder.ExpressPrinter.PrintDoc/ / 打印图片内容/ public class ImagePrinter:IDisposablepublic ImagePrinter(string printerName)if (!printerName.IsNullOrEmpty()this.DefaultPrinterName = printerName;/打印事件设置m_printDoc.PrintPage += new PrintPageEventHandler(this.m_printDoc_PrintPage);#region 变量/ / 打印内容/ protected Bitmap m_printContent = null;/ / 打印机名称/ protected string m_printerName = string.Empty;/ / 打印预览/ PrintPreviewDialog m_printPreview = new PrintPreviewDialog();/ / 待打印文档/ PrintDocument m_printDoc = new PrintDocument();#endregion#region 属性/ / 待打印文档名,打印队列中的显示值/ / 创建人员(日期):草青工作室(111216 12:13)public string PrintDocNameset m_printDoc.DocumentName = value; get return m_printDoc.DocumentName ; / / 获取或设置默认纸张名称/ / 创建人员(日期):草青工作室(111216 12:13)public string DefaultPrinterNameset m_printDoc.DefaultPageSettings.PrinterSettings.PrinterName = value; get return m_printDoc.DefaultPageSettings.PrinterSettings.PrinterName; / / 获取或设置默认纸张大小/ / 创建人员(日期):草青工作室(111216 12:13)public PaperSize DefaultPaperSizeset m_printDoc.DefaultPageSettings.PaperSize = value; get return m_printDoc.DefaultPageSettings.PaperSize; / / 获取或设置默认页边距/ / 创建人员(日期):草青工作室(111216 12:13)public Margins DefaultMarginsset m_printDoc.DefaultPageSettings.Margins = value; get return m_printDoc.DefaultPageSettings.Margins; #endregion#region 方法/ / 准备打印/ / 打印内容/ / 创建人员(日期):草青工作室(111217 16:45)public bool PrinterReady(Bitmap printContent)m_printContent = printContent;/打印事件设置m_printDoc.PrintPage += new PrintPageEventHandler(this.m_printDoc_PrintPage);return true;/ / 打印浏览/ / 创建人员(日期):草青工作室(111215 21:50)public DialogResult PrintView()/打印预览PrintPreviewDialog ppd = new PrintPreviewDialog();ppd.Document = m_printDoc;return ppd.ShowDialog();/ / 开始打印/ / 创建人员(日期):草青工作室(111215 21:50)public void PrintOut()trym_printDoc.Print();catch (Exception ex)/RegisterLog.ExceptionsStack.RegisterError(ex);MessageBox.Show(ex

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论