C#调用打印机实现打印

 更新时间:2022年04月29日 11:41:33   作者:農碼一生  
这篇文章介绍了C#调用打印机实现打印的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、引用BarcodeStandard.dll

        #region BarcodeStandard.dll
        /*
         * 
         * 使用说明
         需要通过NuGet进行安装BarcodeLib.dll,必不可少
         */

        string inputString;

        /// <summary>
        /// 获取所以打印机驱动名称
        /// </summary>
        private void getPrintDocumentlist()
        {
            PrintDocument print = new PrintDocument();
            string sDefault = print.PrinterSettings.PrinterName;//默认打印机名
            comboBox_drive.Items.Add(sDefault);

            comboBox_drive.Text = sDefault;//显示默认驱动名称
            foreach (string sPrint in PrinterSettings.InstalledPrinters)//获取所有打印机名称
            {
                if (sPrint != sDefault)
                {
                    comboBox_drive.Items.Add(sPrint);
                }
            }

        }
        /// <summary>
        /// 打印绘制
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
        {
            Font titleFont = new Font("宋体", 9, FontStyle.Bold);//标题字体           

            Font fntTxt = new Font("宋体", 9, FontStyle.Regular);//正文文字           

            Brush brush = new SolidBrush(Color.Black);//画刷           

            Pen pen = new Pen(Color.Black); //线条颜色           

            Point po = new Point(10, 10);
            try
            {
                //画String
                e.Graphics.DrawString(GetPrintSW().ToString(), titleFont, brush, po);//打印内容
             
                
                //画横线
                //Point[] point = { new Point(20, 50), new Point(200, 50) };//纵坐标不变
                //e.Graphics.DrawLines(pen, point);
                //画竖线
                //Point[] points1 = { new Point(60, 70), new Point(60, 70 + 40) };//横坐标不变
                //e.Graphics.DrawLines(pen, points1);
                //画矩形
                //e.Graphics.DrawRectangle(pen, 20, 70, 90, 90);
            }

            catch (Exception ex)
            {
                MessageBox.Show(this, "打印出错!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

        }
       /// <summary>
       /// 获取打印内容
       /// </summary>
       /// <returns></returns>
        public StringBuilder GetPrintSW()
        {
            StringBuilder sb = new StringBuilder();

            string tou = "XXXXXX科技有限公司";

            string address = "安徽省合肥市瑶海区";

            string saleID = "100010000001";    //单号       

            string item = "项目";

            decimal price = 25.00M;

            int count = 5;

            decimal total = 0.00M;

            decimal fukuan = 500.00M;

            sb.AppendLine(" " + tou + " \n");

            sb.AppendLine("-----------------------------------------");

            sb.AppendLine("日期:" + DateTime.Now.ToShortDateString() + " " + "单号:" + saleID);

            sb.AppendLine("-----------------------------------------");

            sb.AppendLine("项目" + "    " + "数量" + "  " + "单价" + "    " + "小计");

            for (int i = 0; i < count; i++)
            {
                decimal xiaoji = (i + 1) * price;

                sb.AppendLine(item + (i + 1) + "    " + (i + 1) + "   " + price + "    " + xiaoji);

                total += xiaoji;

            }

            sb.AppendLine("-----------------------------------------");

            sb.AppendLine("数量:" + count + "  合计: " + total);

            sb.AppendLine("付款:" + fukuan);

            sb.AppendLine("现金找零:" + (fukuan - total));

            sb.AppendLine("-----------------------------------------");

            sb.AppendLine("地址:" + address + "");

            sb.AppendLine("电话:130000000000");

            sb.AppendLine("谢谢惠顾欢迎下次光临!");

            sb.AppendLine("-----------------------------------------");

            return sb;

        }


        /// <summary>
        /// 生成条形码
        /// </summary>
        /// <param name="content">内容</param>
        /// <returns></returns>
        public static Image GenerateBarCodeBitmap(string content)
        {
            using (var barcode = new Barcode()
            {
                IncludeLabel = true,
                Alignment = AlignmentPositions.CENTER,
                Width = 250,
                Height = 100,
                RotateFlipType = RotateFlipType.RotateNoneFlipNone,
                BackColor = Color.White,
                ForeColor = Color.Black,
            })
            {
                return barcode.Encode(TYPE.CODE128B, content);
            }
        }
        #endregion

二、引用Seagull.BarTender.Print.dll

        #region   Seagull.BarTender.Print.dll
        /// <summary>
        /// 打印测试
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void printbt_Click(object sender, EventArgs e)
        {
            string qd = comboBox_drive.Text;//下拉列表选择的驱动名称
            var printDocument = new PrintDocument();
            //指定打印机
            printDocument.PrinterSettings.PrinterName = qd;//驱动名称             

            printDocument.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
            try
            {
               
                //打印预览
                //PrintPreviewDialog ppd = new PrintPreviewDialog();
                //ppd.Document = printDocument;
                //ppd.ShowDialog();

                //打印
                printDocument.Print();
            }
            catch (InvalidPrinterException)
            {

            }
            finally
            {
                printDocument.Dispose();
            }
        }
        /// <summary>
        /// BarTender打印
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BarTender_Click(object sender, EventArgs e)
        {
            try

            {
                //程序中写入引用 using Seagull.BarTender.Print.dll,必不可少;
                //安装Bartender后,在安装的根目录或者system32下课可找到对应的dll
                #region 
                Engine btEngine = new Engine();
                btEngine.Start();
                string lj = AppDomain.CurrentDomain.BaseDirectory + "test.btw";  //test.btw是BT的模板
                LabelFormatDocument btFormat = btEngine.Documents.Open(lj);

                //对BTW模版相应字段进行赋值 
                btFormat.SubStrings["name"].Value ="Liming";
                btFormat.SubStrings["code"].Value = "1234567890";

                //指定打印机名 
                btFormat.PrintSetup.PrinterName = "WPS 虚拟打印机";

                //改变标签打印数份连载 
                btFormat.PrintSetup.NumberOfSerializedLabels = 1;

                //打印份数                   
                btFormat.PrintSetup.IdenticalCopiesOfLabel = 1;
                Messages messages;

                int waitout = 10000; // 10秒 超时 
                Result nResult1 = btFormat.Print("标签打印软件", waitout, out messages);
                btFormat.PrintSetup.Cache.FlushInterval = CacheFlushInterval.PerSession;

                //不保存对打开模板的修改 
                btFormat.Close(Seagull.BarTender.Print.SaveOptions.DoNotSaveChanges);

                //结束打印引擎                  
                btEngine.Stop();
                #endregion


            }
            catch (Exception ex)
            {
                MessageBox.Show("错误信息: " + ex.Message);
                return;
            }
        }

        #endregion

三、引用 Interop.LabelManager2.dll

        #region  Interop.LabelManager2.dll
        /// <summary>
        /// 打印功能 CodeSoft
        /// </summary>
        /// <param name="PrintParam1">打印模板参数值1</param>
        /// <param name="PrintParam2">打印模板参数值2</param>
        /// <param name="PrintParam3">打印模板参数值3</param>
        /// <param name="PrintParam4">打印模板参数值4</param>
        /// <returns></returns>
        public bool SoftCodePrint(string PrintParam1 = "", string PrintParam2 = "", string PrintParam3 = "", string PrintParam4 = "")
        {
            bool result = false;
            int printNum = 2;//打印份数
            try
            {
                string text = string.Empty;
                ApplicationClass labApp = null;
                Document doc = null;
                string labFileName = AppDomain.CurrentDomain.BaseDirectory + "Template\\" + "Test.Lab";//模板地址
                if (!File.Exists(labFileName))
                {
                    throw new Exception("沒有找到标签模版");
                }

                for (int i = 0; i < printNum; i++)
                {
                    labApp = new ApplicationClass();
                    labApp.Documents.Open(labFileName, false);// 调用设计好的label文件
                    doc = labApp.ActiveDocument;

                    //可通过配置档进行配置打印信息
                    doc.Variables.FreeVariables.Item("模板变量名称1").Value = PrintParam1;
                    doc.Variables.FreeVariables.Item("模板变量名称2").Value = PrintParam2;
                    doc.Variables.FreeVariables.Item("模板变量名称3").Value = PrintParam3;
                    doc.Variables.FreeVariables.Item("模板变量名称4").Value = PrintParam4;
                    doc.PrintDocument(1);
                }

                labApp.Quit();
                result = true;
            }
            catch (Exception ex)
            {

            }
            return result;

        }
        #endregion

dll下载地址

到此这篇关于C#调用打印机实现打印的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解C#如何实现一个安全的事件订阅器

    详解C#如何实现一个安全的事件订阅器

    事件订阅器是一个对象,它订阅(或监听)某个事件,并在事件发生时执行相应的操作,本文主要介绍了C#实现一个安全的事件订阅器的相关知识,感兴趣的可以了解下
    2024-01-01
  • C# NullReferenceException解决案例讲解

    C# NullReferenceException解决案例讲解

    这篇文章主要介绍了C# NullReferenceException解决案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C#中const 和 readonly 修饰符的用法详解

    C#中const 和 readonly 修饰符的用法详解

    这篇文章主要介绍了C#中const 和 readonly 修饰符的用法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • C#的TimeSpan案例详解

    C#的TimeSpan案例详解

    这篇文章主要介绍了C#的TimeSpan案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C#实现为一张大尺寸图片创建缩略图的方法

    C#实现为一张大尺寸图片创建缩略图的方法

    这篇文章主要介绍了C#实现为一张大尺寸图片创建缩略图的方法,涉及C#创建缩略图的相关图片操作技巧,需要的朋友可以参考下
    2015-06-06
  • 在Winform和WPF中注册全局快捷键实现思路及代码

    在Winform和WPF中注册全局快捷键实现思路及代码

    如果注册快捷键,RegisterHotKey中的fsModifiers参数为0,即None选项,一些安全软件会警报,可能因为这样就可以全局监听键盘而造成安全问题,感兴趣的你可以参考下本文
    2013-02-02
  • c#文本加密程序代码示例

    c#文本加密程序代码示例

    这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
    2013-11-11
  • Unity UI组件ScrollRect实现无限滚动条

    Unity UI组件ScrollRect实现无限滚动条

    这篇文章主要为大家详细介绍了Unity UI组件ScrollRect实现无限滚动条,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C#实现对Json字符串处理实例

    C#实现对Json字符串处理实例

    这篇文章主要介绍了C#实现对Json字符串处理,通过一个json实例分析了C#进行JSON操作的方法,需要的朋友可以参考下
    2014-09-09
  • 详细介绍C#之文件校验工具的开发及问题

    详细介绍C#之文件校验工具的开发及问题

    目前校验文件使用最多的是MD值和SHA值,不外乎有些使用CRC,前段时间微软发布了VisualStudio正式版,win镜像,微软官方给出的校验方式都是校验文件的SHA值。下面详细介绍C#之文件校验工具的开发及问题,需要的朋友可以参考下
    2015-07-07

最新评论