【第二十四篇】C#進行A4打印


    public class TriplicatePrint
    {
        private const int HeadHeight = 14;
        private const string FontName = "黑體";
        private readonly SolidBrush _drawBrush_Black = new SolidBrush(Color.Black);
        private static readonly Font TableFont = new Font(FontName, 8, FontStyle.Regular);//表格字體
        private readonly int _yUnit = TableFont.Height * 2;//表格高度
        public int TotalNum = 0;//當前要所要打印的記錄行數,由計算得到
        private int WordMaxNum = 35;//最長可輸出的字數
        private int twoRowNum = 0;//換行的行數
        private bool flag = false;//有沒有換行
        private int TableFootHeight = 50;//腳注高度
        private TriplicateMsg ticketMsg;
        private DataRow _dataRow;
        private DataTable _dataTable;
        private int _firstPrintRecordNumber;//第一頁的記錄數
        private string _headText = string.Empty;
        private int _pBottom;//頁面下邊距
        private int _pHeigh;//頁面左邊距
        private int _pLeft;//頁面左邊距
        private int _pTop;//頁面上邊距
        private int _pWidth;//頁寬
        private int _pageRecordNumber;//總記錄行數
        private PrintDocument _printDocument;
        private int _printRecordComplete;//答應成功的條數
        private int _printRecordNumber;//每頁打印的記錄條數
        private int _printingPageNumber = 1;//當前打印頁
        //第一頁打印的記錄條數
        //與列名無關的統計數據行的類目數(如,總計,小計......)
        private int _totalPage;//總頁數
        private int[] _xUnit;//列寬集合

        /// <summary>
        /// 打印信息
        /// </summary>
        private string TicketJson;

        public TriplicatePrint(string order)
        {
            TicketJson = order;
        }

        /// <summary>
        /// 執行打印
        /// </summary>
        public void Print()
        {
            // 通過多線程操作打印
            Thread thread = new Thread(PrintOrder);
            thread.IsBackground = true;
            thread.Start();
        }


        /// <summary>
        /// 打印普通消費小票
        /// </summary>
        private void PrintOrder()
        {
            Thread.Sleep(100);

            if (string.IsNullOrEmpty(Setting.TriplicatePrintName))
            {
                LoggerHelper.Info("請先設置默認打印機!");
                return;
            }
            if (Setting.Triplicate == 0)
            {
                LoggerHelper.Info("未開啟三聯單自動打印!");
                return;
            }
            if (Setting.TriplicateTicketCount < 1)
            {
                LoggerHelper.Info("打印份數小於1!");
                return;
            }

            _dataTable = new DataTable();
            _dataTable.Columns.Add("名稱", System.Type.GetType("System.String"));
            _dataTable.Columns.Add("規格", System.Type.GetType("System.String"));
            _dataTable.Columns.Add("單位", System.Type.GetType("System.String"));
            _dataTable.Columns.Add("折后價", System.Type.GetType("System.String"));
            _dataTable.Columns.Add("數量", System.Type.GetType("System.String"));
            _dataTable.Columns.Add("金額", System.Type.GetType("System.String"));

            ticketMsg = JsonConvert.DeserializeObject<TriplicateMsg>(TicketJson);
            foreach (var item in ticketMsg.detaillist)
            {
                DataRow dr = _dataTable.NewRow();
                dr["名稱"] = item.GoodsName;
                dr["規格"] = item.SpecsValue;
                dr["單位"] = item.Unit;
                dr["折后價"] = item.DiscountMoney;
                dr["數量"] = item.Number;
                dr["金額"] = item.TotalMoney;
                _dataTable.Rows.Add(dr);
            }

            if (ticketMsg.template.header != null)
            {
                foreach (var item in ticketMsg.template.header)
                {
                    _headText += item.value + "|";
                }
            }

            _headText = _headText.TrimEnd('|');
            bool Landscape = false;
            if (Setting.Landscape == 1)
            {
                Landscape = true;
            }
            _printDocument = new PrintDocument();
            _printDocument.PrinterSettings.PrinterName = Setting.TriplicatePrintName;
            _printDocument.DefaultPageSettings.PaperSize = new PaperSize("A4", 826, 1129);
            _printDocument.DefaultPageSettings.Landscape = Landscape; //設置打印橫向還是縱向 (True為橫向,False為豎向)
            _pTop = _printDocument.DefaultPageSettings.Margins.Top / 3;//頁面上邊距
            _pBottom = _printDocument.DefaultPageSettings.Margins.Bottom / 3;//頁面下邊距
            _pWidth = _printDocument.DefaultPageSettings.Bounds.Width;//頁面寬度
            _pHeigh = _printDocument.DefaultPageSettings.Bounds.Height;//頁面高度
            _xUnit = new int[_dataTable.Columns.Count];//初始化有多少個列(存列寬進去)
            _printRecordNumber = Convert.ToInt32((_pHeigh - _pTop - _pBottom - _yUnit - TableFootHeight) / _yUnit);//一頁打印的行數
            _firstPrintRecordNumber = Convert.ToInt32((_pHeigh - _pTop - _pBottom - HeadHeight - _yUnit - TableFootHeight) / _yUnit) - 4;//第一頁打印的行數

            #region 計算打印總頁數
            foreach (DataRow dr in _dataTable.Rows)
            {
                for (int i = 0; i < _dataTable.Columns.Count; i++)
                {
                    if (dr[i].ToString().Length > WordMaxNum)
                    {
                        twoRowNum += 1;
                        break;
                    }
                }
            }
            if (_dataTable.Rows.Count + twoRowNum + 1 > _printRecordNumber)
            {
                if ((_dataTable.Rows.Count + twoRowNum + 1 - _firstPrintRecordNumber) % _printRecordNumber == 0)
                {
                    _totalPage = (_dataTable.Rows.Count + twoRowNum + 1 - _firstPrintRecordNumber) / _printRecordNumber;
                }
                else
                {
                    decimal a = _dataTable.Rows.Count + twoRowNum + 1 - _firstPrintRecordNumber;
                    decimal page = a / _printRecordNumber + 1;
                    _totalPage = Convert.ToInt32(Math.Ceiling(page));
                }
            }
            else
            {
                if (_dataTable.Rows.Count + 1 + twoRowNum < _firstPrintRecordNumber)
                {
                    _totalPage = 1;
                }
                else
                {
                    _totalPage = 2;
                }
            }
            #endregion

            _printDocument.PrintPage += PrintDocumentPrintPage;
            _printDocument.DocumentName = _headText;

            try
            {
                for (int i = 0; i < Setting.TriplicateTicketCount; i++)
                {
                    _printDocument.Print();
                }
            }
            catch
            {

            }
        }

        /// <summary>
        ///     打印當前頁
        /// </summary>
        private void PrintDocumentPrintPage(object sende, PrintPageEventArgs @event)
        {
            int tableWith = 0;
            string columnText;
            var font = new StringFormat { Alignment = StringAlignment.Center };
            var pen = new Pen(Brushes.Black, 1);//打印表格線格式

            #region 設置列寬
            foreach (DataRow dr in _dataTable.Rows)
            {
                for (int i = 0; i < _dataTable.Columns.Count; i++)
                {
                    int colwidth = Convert.ToInt32(@event.Graphics.MeasureString(dr[i].ToString().Trim(), TableFont).Width) + 10;
                    if (colwidth > _xUnit[i])
                    {
                        if (i == _dataTable.Columns.Count - 2)
                        {
                            _xUnit[i] = colwidth + 40;
                        }
                        else if (i == _dataTable.Columns.Count - 1)
                        {
                            _xUnit[i] = colwidth + 44;
                        }
                        else
                        {
                            _xUnit[i] = colwidth;
                        }
                    }
                }
            }

            int sumUnit = 0;
            flag = false;//是否超過頁面總長
            foreach (int item in _xUnit)
            {
                sumUnit += item;
                if (sumUnit >= _pWidth - 40)
                {
                    flag = true;
                    break;
                }
            }

            if (sumUnit < _pWidth / 2)
            {
                _xUnit = new int[_dataTable.Columns.Count];
                _xUnit[0] = 200;
                _xUnit[1] = 200;
                _xUnit[2] = 48;
                _xUnit[3] = 34;
                _xUnit[4] = 60;
                _xUnit[5] = 90;
            }
            if (flag)
            {
                _xUnit = new int[_dataTable.Columns.Count];
                _xUnit[0] = 400;
                _xUnit[1] = 400;
                _xUnit[2] = 48;
                _xUnit[3] = 34;
                _xUnit[4] = 80;
                _xUnit[5] = 100;
            }

            if (_printingPageNumber == 1)
            {
                for (int cols = 0; cols <= _dataTable.Columns.Count - 1; cols++)
                {
                    columnText = _dataTable.Columns[cols].ColumnName.Trim();
                    int colwidth = Convert.ToInt32(@event.Graphics.MeasureString(columnText, TableFont).Width) + 10;
                    if (colwidth > _xUnit[cols])
                    {
                        _xUnit[cols] = colwidth;
                    }
                }
            }
            for (int i = 0; i < _xUnit.Length; i++)
            {
                tableWith += _xUnit[i];
            }
            #endregion

            _pLeft = (@event.PageBounds.Width - tableWith) / 2;
            int x = _pLeft;
            int y = _pTop;
            int stringY = _pTop + (_yUnit - TableFont.Height) / 2;
            int rowOfTop = _pTop;

            //第一頁
            if (_printingPageNumber == 1)
            {
                var subtitleHeight = 20;
                if (!string.IsNullOrEmpty(_headText))
                {
                    //打印表頭
                    var arr = _headText.Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
                    if (arr.Length > 1)
                    {
                        @event.Graphics.DrawString(arr[0],
                            new Font(FontName, HeadHeight, FontStyle.Regular),
                            _drawBrush_Black,
                            new Point(@event.PageBounds.Width / 2, _pTop), font);
                    }
                    //副標題
                    for (int i = 1; i < arr.Length; i++)
                    {
                        @event.Graphics.DrawString(arr[i],
                            new Font(FontName, 12, FontStyle.Regular),
                            _drawBrush_Black,
                            new Point(@event.PageBounds.Width / 2, _pTop + HeadHeight + 20),
                            font);
                        subtitleHeight += new Font(FontName, 10, FontStyle.Regular).Height;
                    }

                    subtitleHeight += 14;//標題和表頭之間的間距

                }
                var tbTopHeight = 20;//表頭高度
                var tbTopLeft = _pLeft + 10;

                #region Top表頭內容
                if (ticketMsg.template.top != null)
                {
                    var topNum = ticketMsg.template.top.Count;
                    if (topNum > 0)
                    {//居中 = 空間長度 - 自己長度的一半
                        @event.Graphics.DrawString(ticketMsg.template.top[0].name + ":" + ticketMsg.template.top[0].value, TableFont, _drawBrush_Black, new Point(tbTopLeft, _pTop + HeadHeight + subtitleHeight));
                    }
                    if (topNum > 1)
                    {
                        tbTopLeft += Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.template.top[0].name + ":" + ticketMsg.template.top[0].value, TableFont).Width) + 14;
                        @event.Graphics.DrawString(ticketMsg.template.top[1].name + ":" + ticketMsg.template.top[1].value, TableFont, _drawBrush_Black, new Point(@event.PageBounds.Width / 2 - Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.template.top[1].name + ":" + ticketMsg.template.top[1].value, TableFont).Width) / 2, _pTop + HeadHeight + subtitleHeight));
                    }
                    if (topNum > 2 && topNum == 6)
                    {
                        tbTopLeft += Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.template.top[1].name + ":" + ticketMsg.template.top[1].value, TableFont).Width) + 14;
                        @event.Graphics.DrawString(ticketMsg.template.top[2].name + ":" + ticketMsg.template.top[2].value, TableFont, _drawBrush_Black, new Point(_pLeft + tableWith - Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.template.top[2].name + ":" + ticketMsg.template.top[2].value, TableFont).Width) - 110, _pTop + HeadHeight + subtitleHeight));
                    }
                    else
                    {
                        tbTopLeft += Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.template.top[1].name + ":" + ticketMsg.template.top[1].value, TableFont).Width) + 14;
                        @event.Graphics.DrawString(ticketMsg.template.top[2].name + ":" + ticketMsg.template.top[2].value, TableFont, _drawBrush_Black, new Point(_pLeft + tableWith - Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.template.top[2].name + ":" + ticketMsg.template.top[2].value, TableFont).Width), _pTop + HeadHeight + subtitleHeight));
                    }
                    if (topNum > 3)
                    {
                        subtitleHeight += new Font(FontName, 10, FontStyle.Regular).Height + 10;
                        tbTopLeft = _pLeft + 10;
                        @event.Graphics.DrawString(ticketMsg.template.top[3].name + ":" + ticketMsg.template.top[3].value, TableFont, _drawBrush_Black, new Point(tbTopLeft, _pTop + HeadHeight + subtitleHeight));
                    }
                    if (topNum > 4)
                    {
                        tbTopLeft += Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.template.top[0].name + ":" + ticketMsg.template.top[0].value, TableFont).Width) + 14;
                        @event.Graphics.DrawString(ticketMsg.template.top[4].name + ":" + ticketMsg.template.top[4].value, TableFont, _drawBrush_Black, new Point(@event.PageBounds.Width / 2 - Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.template.top[1].name + ":" + ticketMsg.template.top[1].value, TableFont).Width) / 2, (_pTop + HeadHeight + subtitleHeight)));
                    }
                    if (topNum > 5)
                    {
                        tbTopLeft += Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.template.top[1].name + ":" + ticketMsg.template.top[1].value, TableFont).Width) + 14;
                        @event.Graphics.DrawString(ticketMsg.template.top[5].name + ":" + ticketMsg.template.top[5].value, TableFont, _drawBrush_Black, new Point(_pLeft + tableWith - Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.template.top[2].name + ":" + ticketMsg.template.top[2].value, TableFont).Width) - 110, (_pTop + HeadHeight + subtitleHeight)));
                    }
                    tbTopHeight += 14;//表頭和表格中間的間隔 
                }
                #endregion

                //設置為第一頁時行數 
                if (_dataTable.Rows.Count < _firstPrintRecordNumber)
                {
                    _pageRecordNumber = _dataTable.Rows.Count;
                }
                else
                {
                    _pageRecordNumber = _firstPrintRecordNumber;
                }

                subtitleHeight += 10;
                rowOfTop = y = (_pTop + HeadHeight + subtitleHeight + tbTopHeight);
                stringY = (_pTop + HeadHeight + subtitleHeight + tbTopHeight + (_yUnit - TableFont.Height) / 2);
            }
            else
            {
                if (flag)
                {
                    _printRecordNumber = 12;
                }
                //計算,余下的記錄條數是否還可以在一頁打印,不滿一頁時為假
                if (_dataTable.Rows.Count - _printRecordComplete >= _printRecordNumber)
                {
                    _pageRecordNumber = _printRecordNumber;
                }
                else
                {
                    _pageRecordNumber = _dataTable.Rows.Count - _printRecordComplete;
                }
            }

            #region 打印列名
            if (_printingPageNumber == 1 || _pageRecordNumber > TotalNum) //最后一頁只打印統計行時不打印列名
            {
                //得到datatable的所有列名
                for (int cols = 0; cols <= _dataTable.Columns.Count - 1; cols++)
                {
                    columnText = _dataTable.Columns[cols].ColumnName.Trim();
                    int colwidth = Convert.ToInt32(@event.Graphics.MeasureString(columnText, TableFont).Width);

                    @event.Graphics.DrawString(columnText, TableFont, _drawBrush_Black, x + (_xUnit[cols] / 2 - Convert.ToInt32(@event.Graphics.MeasureString(columnText, TableFont).Width) / 2), stringY);//值,字體,顏色,x坐標,y坐標
                    x += _xUnit[cols];
                }
            }
            #endregion

            if (_printingPageNumber == 1)
            {//第一頁表格頂部需要打印一條雙橫線
                @event.Graphics.DrawLine(pen, _pLeft, rowOfTop - 4, x, rowOfTop - 4);//表格頂部的線
                @event.Graphics.DrawLine(pen, _pLeft, rowOfTop - 5, x, rowOfTop - 5);//表格頂部的線
            }

            @event.Graphics.DrawLine(pen, _pLeft, rowOfTop, x, rowOfTop);//表格頂橫線
            if (_printRecordComplete < _dataTable.Rows.Count)
            {
                stringY += _yUnit;
                y += _yUnit;
                @event.Graphics.DrawLine(pen, _pLeft, y, x, y);//列名下面的橫線
            }

            #region 打印單元格 數據  和  表格橫線
            //當前頁面已經打印的記錄行數
            int printingLine = 0;
            if (_printingPageNumber == 1 && flag && _dataTable.Rows.Count >= _pageRecordNumber)
            {
                _pageRecordNumber = 9;
            }
            while (printingLine < _pageRecordNumber)
            {
                if (_printRecordComplete == _dataTable.Rows.Count)
                {
                    break;
                }
                x = _pLeft;
                //確定要當前要打印的記錄的行號
                _dataRow = _dataTable.Rows[_printRecordComplete];
                bool newline = true;
                for (int cols = 0; cols <= _dataTable.Columns.Count - 1; cols++)
                {
                    if (flag)
                    {//需要換行
                        if (_dataRow[cols].ToString().Length > WordMaxNum)
                        {
                            string[] colum = new string[2] { _dataRow[cols].ToString().Substring(0, WordMaxNum), _dataRow[cols].ToString().Substring(WordMaxNum) };

                            @event.Graphics.DrawString(colum[0], TableFont, _drawBrush_Black, x, stringY);//值,字體,顏色,x坐標,y坐標
                            @event.Graphics.DrawString(colum[1], TableFont, _drawBrush_Black, x, stringY + _yUnit);//值,字體,顏色,x坐標,y坐標
                            x += _xUnit[cols];
                        }
                        else
                        {
                            if (_dataRow[0].ToString().Length < WordMaxNum && _dataRow[1].ToString().Length < WordMaxNum)
                            {//不需要打空行
                                newline = false;
                                if (cols != 0 && cols != 1)
                                {
                                    @event.Graphics.DrawString(_dataRow[cols].ToString().Trim(), TableFont, _drawBrush_Black, x + (_xUnit[cols] / 2 - Convert.ToInt32(@event.Graphics.MeasureString(_dataRow[cols].ToString().Trim(), TableFont).Width) / 2), stringY);
                                }
                                else
                                {
                                    @event.Graphics.DrawString(_dataRow[cols].ToString().Trim(), TableFont, _drawBrush_Black, x, stringY);
                                }
                            }
                            else
                            {
                                if (cols != 0 && cols != 1)
                                {
                                    @event.Graphics.DrawString(_dataRow[cols].ToString().Trim(), TableFont, _drawBrush_Black, x + (_xUnit[cols] / 2 - Convert.ToInt32(@event.Graphics.MeasureString(_dataRow[cols].ToString().Trim(), TableFont).Width) / 2), stringY);
                                }
                                else
                                {
                                    @event.Graphics.DrawString(_dataRow[cols].ToString().Trim(), TableFont, _drawBrush_Black, x, stringY);
                                }
                                @event.Graphics.DrawString("", TableFont, _drawBrush_Black, x, stringY + _yUnit);
                            }
                            x += _xUnit[cols];
                        }
                    }
                    else
                    {
                        @event.Graphics.DrawString(_dataRow[cols].ToString().Trim(), TableFont, _drawBrush_Black, x + (_xUnit[cols] / 2 - Convert.ToInt32(@event.Graphics.MeasureString(_dataRow[cols].ToString().Trim(), TableFont).Width) / 2), stringY);
                        x += _xUnit[cols];
                    }
                }
                if (flag && newline)
                {
                    stringY += _yUnit * 2;
                    y += _yUnit * 2;
                }
                else
                {
                    stringY += _yUnit;
                    y += _yUnit;
                }

                @event.Graphics.DrawLine(pen, _pLeft, y, x, y);

                printingLine += 1;
                _printRecordComplete += 1;

                if (_printRecordComplete > _dataTable.Rows.Count)
                {
                    @event.HasMorePages = false;
                    _printRecordComplete = 0;
                }
            }

            #endregion

            #region 打印單元格豎線
            if (_printRecordComplete <= _dataTable.Rows.Count)
            {
                @event.Graphics.DrawLine(pen, _pLeft, rowOfTop, _pLeft, y);
                x = _pLeft;
                for (int cols = 0; cols < _dataTable.Columns.Count; cols++)
                {
                    x += _xUnit[cols];
                    @event.Graphics.DrawLine(pen, x, rowOfTop, x, y);
                }
            }
            #endregion

            #region 合計和腳注
            if (_printingPageNumber == _totalPage)
            {//最后加一個合計
                if (_printRecordComplete == _dataTable.Rows.Count && _printingPageNumber != 1)
                {
                    @event.Graphics.DrawLine(pen, _pLeft, _pTop, x, _pTop);
                }
                @event.Graphics.DrawString("合計(大寫):" + ticketMsg.combined.CombinedStr, TableFont, _drawBrush_Black, _pLeft + 10, stringY);
                stringY += _yUnit;
                y += _yUnit;
                @event.Graphics.DrawLine(pen, _pLeft, y, x, y);

                @event.Graphics.DrawLine(pen, _pLeft + _xUnit[0] + _xUnit[1] + _xUnit[2] + _xUnit[3], rowOfTop, _pLeft + _xUnit[0] + _xUnit[1] + _xUnit[2] + _xUnit[3], y);
                @event.Graphics.DrawString(ticketMsg.combined.Number.ToString("f2"), TableFont, _drawBrush_Black, _pLeft + _xUnit[0] + _xUnit[1] + _xUnit[2] + _xUnit[3] + (_xUnit[4] / 2 - Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.combined.Number.ToString("f2").Trim(), TableFont).Width) / 2), stringY - _yUnit);

                @event.Graphics.DrawLine(pen, _pLeft + _xUnit[0] + _xUnit[1] + _xUnit[2] + _xUnit[3] + _xUnit[4], rowOfTop, _pLeft + _xUnit[0] + _xUnit[1] + _xUnit[2] + _xUnit[3] + _xUnit[4], y);
                @event.Graphics.DrawString(ticketMsg.combined.SumMoney.ToString("f2"), TableFont, _drawBrush_Black, _pLeft + _xUnit[0] + _xUnit[1] + _xUnit[2] + _xUnit[3] + _xUnit[4] + (_xUnit[5] / 2 - Convert.ToInt32(@event.Graphics.MeasureString(ticketMsg.combined.SumMoney.ToString("f2").Trim(), TableFont).Width) / 2), stringY - _yUnit);

                @event.Graphics.DrawLine(pen, _pLeft, rowOfTop, _pLeft, y);
                @event.Graphics.DrawLine(pen, x, rowOfTop, x, y);

                y += 20;
                var tbTopLeft = 0;

                #region 打印底部
                if (ticketMsg.template.bottom != null)
                {
                    if (ticketMsg.template.bottom.Count > 0)
                    {
                        List<TicketField> tfList = new List<TicketField>();
                        foreach (var item in ticketMsg.template.bottom)
                        {
                            if (item.key != "Address" && item.key != "Remark")
                            {
                                tfList.Add(item);
                            }
                        }
                        if (tfList.Count > 0)
                        {
                            var left = _pLeft + 10;
                            @event.Graphics.DrawString(tfList[0].name + ":" + tfList[0].value, TableFont, _drawBrush_Black, new Point(left, y));
                        }
                        if (tfList.Count > 1)
                        {
                            var left = @event.PageBounds.Width / 2 - Convert.ToInt32(@event.Graphics.MeasureString(tfList[1].name + ":" + tfList[1].value, TableFont).Width) / 2;
                            tbTopLeft += Convert.ToInt32(@event.Graphics.MeasureString(tfList[0].name + ":" + tfList[0].value, TableFont).Width) + 14;
                            @event.Graphics.DrawString(tfList[1].name + ":" + tfList[1].value, TableFont, _drawBrush_Black, new Point(left, y));
                        }
                        if (tfList.Count > 2)
                        {
                            var left = _pLeft + tableWith - Convert.ToInt32(@event.Graphics.MeasureString(tfList[2].name + ":" + tfList[2].value, TableFont).Width);
                            if (tfList[2].key == "GKQM")
                            {
                                left -= 80;
                            }
                            tbTopLeft += Convert.ToInt32(@event.Graphics.MeasureString(tfList[1].name + ":" + tfList[1].value, TableFont).Width) + 14;
                            @event.Graphics.DrawString(tfList[2].name + ":" + tfList[2].value, TableFont, _drawBrush_Black, new Point(left, y));
                        }
                        y += 20;

                        foreach (var item in ticketMsg.template.bottom)
                        {
                            switch (item.key)
                            {
                                case "Address":
                                    @event.Graphics.DrawString("地址:" + item.value, TableFont, _drawBrush_Black, new Point(_pLeft + 10, y));
                                    y += 20;
                                    break;
                                case "Remark":
                                    @event.Graphics.DrawString("備注:" + item.value, TableFont, _drawBrush_Black, new Point(_pLeft + 10, y));
                                    y += 20;
                                    break;
                            }
                        }
                    }
                }
                #endregion


                #region 打印腳部
                if (ticketMsg.template.footer != null)
                {
                    if (ticketMsg.template.footer.enable == 1)
                    {
                        @event.Graphics.DrawString(ticketMsg.template.footer.value, TableFont, _drawBrush_Black, new Point(_pLeft + 10, y));
                    }
                }
                #endregion
            }
            #endregion

            _printingPageNumber += 1;

            if (_printingPageNumber > _totalPage)
            {
                @event.HasMorePages = false;
                _printingPageNumber = 1;
                _printRecordComplete = 0;
            }
            else
            {
                @event.HasMorePages = true;
            }
        }

    }

 

public void TriplicatePrint(string ticketMsg)
{
     new TriplicatePrint(ticketMsg).Print();
}

 

--------------------------------------------------------------------------------------------------------- 

轉載請記得說明作者和出處哦-.-
作者:KingDuDu
原文出處:https://www.cnblogs.com/kingdudu/articles/12673528.html

---------------------------------------------------------------------------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM