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

本文详细探讨了如何使用C#编程语言进行A4纸张的打印操作,涵盖了设置页面尺寸、页边距、打印内容布局等关键点,旨在帮助开发者实现高效准确的文档打印功能。
摘要由CSDN通过智能技术生成
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 = 20;//最长可输出的字数
        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 _pTop;//页面上边距
        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;
            }

            ticketMsg = JsonConvert.DeserializeObject<TriplicateMsg>(TicketJson);

            _dataTable = new DataTable();
            if (ticketMsg.template.center != null && ticketMsg.template.center.Any())
            {
                if (ticketMsg.template.center.Any(it => it.key == "GoodCode"))
                {
                    _dataTable.Columns.Add("商品编号", System.Type.GetType("System.String"));
                }
                if (ticketMsg.template.center.Any(it => it.key == "Name"))
                {
                    _dataTable.Columns.Add("名称", System.Type.GetType("System.String"));
                }
                if (ticketMsg.template.center.Any(it => it.key == "Specs"))
                {
                    _dataTable.Columns.Add("规格", System.Type.GetType("System.String"));
                }
                if (ticketMsg.template.center.Any(it => it.key == "Unit"))
                {
                    _dataTable.Columns.Add("单位", System.Type.GetType("System.String"));
                }
                if (ticketMsg.template.center.Any(it => it.key == "Price"))
                {
                    _dataTable.Columns.Add("单价", System.Type.GetType("System.String"));
                }
            }
            //else
            //{
            //    _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"));
            _dataTable.Columns.Add("金额", System.Type.GetType("System.String"));

            foreach (var item in ticketMsg.detaillist)
            {
                DataRow dr = _dataTable.NewRow();

                if (ticketMsg.template.center != null && ticketMsg.template.center.Any())
                {
                    if (ticketMsg.template.center.Any(it => it.key == "GoodCode"))
                    {
                        dr["商品编号"] = item.GoodsCode;
                    }
                    if (ticketMsg.template.center.Any(it => it.key == "Name"))
                    {
                        dr["名称"] = item.GoodsName;
                    }
                    if (ticketMsg.template.center.Any(it => it.key == "Specs"))
                    {
                        dr["规格"] = item.SpecsValue;
                    }
                    if (ticketMsg.template.center.Any(it => it.key == "Unit"))
                    {
                        dr["单位"] = item.Unit;
                    }
                    if (ticketMsg.template.center.Any(it => it.key == "Price"))
                    {
                        dr["单价"] = item.DiscountMoney;
                    }
                }
                //else
                //{
                //    dr["商品编号"] = item.GoodsCode;
                //    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 != null && ticketMsg.template.header != null)
            {
                foreach (var item in ticketMsg.template.header)
                {
                    _headText += item.value + "|";
                }
            }

   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值