POS打印机系列之 => 驱动
直接上代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/// <summary> /// 驱动打印 /// </summary> public interface IPrintDriver<T> : IPrintUtil where T : class { /// <summary> /// Prints by the specified printer.驱动打印执行 /// </summary> /// <typeparam name="T">打印数据的存储类型</typeparam> /// <param name="printerName">Name of the printer.</param> /// <param name="lstPrt">The LST PRT.</param> /// <param name="num">打印份数</param> /// <returns></returns> ActionResult Print(string printerName,T lstPrt, byte num); } public class DriverPrint<T>:IPrintDriver<T> where T:class { private static int printCount = 0; private Func<Graphics, float, T, bool> _printPages = null; private T _lstPrt = default(T); /// <summary> /// Initializes a new instance of the <see cref="DriverPrint{T}"/> class. /// </summary> /// <param name="printPages">执行打印页面. float参数表示页高. T 表示要打印的数据对象. bool返回值表示HasMorePages"/></param> public DriverPrint(Func<Graphics, float, T, bool> printPages) { _printPages = printPages; } /// <summary> /// Prints by the specified printer.驱动打印执行 /// </summary> /// <typeparam name="T">打印数据的存储类型</typeparam> /// <param name="printerName">Name of the printer.</param> /// <param name="lstPrt">The LST PRT.</param> /// <returns></returns> public ActionResult Print(string printerName, T lstPrt, byte num) { if (lstPrt == null) return new ActionResult(false, "打印的数据不能为空"); if (string.IsNullOrEmpty(printerName)) return new ActionResult(false, "打印机的名称不能为空"); _lstPrt = lstPrt; PrintDialog printDlg = new PrintDialog(); PrintDocument docToPrint = new PrintDocument(); docToPrint.DocumentName = string.Format("排队网POS厨打小票({0})", printCount++); docToPrint.PrinterSettings.PrinterName = printerName; docToPrint.PrinterSettings.Copies = num; docToPrint.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0); docToPrint.PrintController = new StandardPrintController(); docToPrint.PrintPage += new PrintPageEventHandler(PrintPageEventHandler); printDlg.Document = docToPrint; try { var statu = GetPrinterStatus(printerName); if (statu.Content != Util.Print.PrinterStatus.OK) return new ActionResult(false, string.Format("打印机{0}状态异常:{1}", printerName, EnumDescriptionAttribute.GetDescription(statu.Content))); docToPrint.Print(); } catch (Exception ex) { LogUtil.Error(ex.Message); return new ActionResult(false, ex.Message); } return new ActionResult(true); } /// <summary> /// 打印输出事件 /// </summary> /// <param name="obj">obj</param> /// <param name="e">e</param> private void PrintPageEventHandler(object obj, PrintPageEventArgs e) { var pageHeight = e.MarginBounds.Height - e.PageSettings.HardMarginY * 2; if (_printPages(e.Graphics, pageHeight, _lstPrt)) { e.HasMorePages = true; } else { e.HasMorePages = false; } } }
现代足球中场兼进球,兼防守扫荡。软件开发也要求产品意识,质量测试。