POS打印机系列之 => 驱动

直接上代码

/// <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;
            }
        }
    }
View Code

 

posted @ 2013-07-17 11:34  zzq417  阅读(315)  评论(0编辑  收藏  举报