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#调用打印机实现打印的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • c# 获取已安装的打印机并调用打印文件

    C# 获取所有安装了的打印机代码如下: using System.Drawing.Printing; var printers = PrinterSettings.InstalledPrinters; foreach (var item in printers) { Console.WriteLine(item.ToString()); } C# 调用打印机打印文件,通常情况下,例如Word.Excel.PDF等可以使用一些对应的组件进行打印,另一个通用的方式是直接启用一个打印的进程进行打印.示

  • c# 实现打印机状态查询与阻塞打印

    在使用winform编写自动打印服务的过程中,发现只要进行了打印命令的调用,文档就会进入到打印等待队列,如果打印机无法正常工作,则会影响到相关业务数据的正确转换,所以需要检查打印机的状态来保障每次打印时打印机处于空闲状态,打印时队列中也只能有一个文档,本文是通过引用System.Management来实现对打印机状态的查询 打印机状态获取 enum PrinterStatus { 其他 = 1, 未知 = 2, 空闲 = 3, 打印 = 4, 预热 = 5, 停止打印 = 6, 脱机 = 7,

  • C# 获取打印机当前状态的方法

    要获得打印机的状态,应该定义一个联合. 复制代码 代码如下: enum PrinterStatus { 其他状态= 1, 未知, 空闲, 正在打印, 预热, 停止打印, 打印中, 离线} 其中的"正在打印"和"打印中"是同一个意思,至于为什么会是这样,目前还不知道. 在程序中添加System.Management的引用:using System.Management; 然后编写获取打印机状态的函数如下: 复制代码 代码如下: /// <summary> 

  • C#使用控制台列出当前所有可用的打印机列表

    本文实例讲述了C#使用控制台列出当前所有可用打印机列表的方法.分享给大家供大家参考.具体如下: // The initial C# code for the WMI query was generated by WMI Code //Generator, Version 5.00, http://www.robvanderwoude.com/wmigen.php using System; using System.Management; using System.Collections; na

  • C#调用打印机实现打印

    一.引用BarcodeStandard.dll #region BarcodeStandard.dll /* * * 使用说明 需要通过NuGet进行安装BarcodeLib.dll,必不可少 */ string inputString; /// <summary> /// 获取所以打印机驱动名称 /// </summary> private void getPrintDocumentlist() { PrintDocument print = new PrintDocument(

  • Unity调用打印机打印图片

    本文实例为大家分享了Unity打印机打印图片的具体代码,供大家参考,具体内容如下 1.调用打印机首先就是要配置好打印机 就是电脑跟打印机已经连接好,有默认的打印机可以启动使用 2.调用方式 (1)使用外部第三方软件exe 代码如下:(就两句) string path = Application.dataPath + @"\Textures\002.png"; System.Diagnostics.Process.Start("mspaint.exe", path);

  • JS调用打印机功能简单示例

    本文实例讲述了JS调用打印机功能的方法.分享给大家供大家参考,具体如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head&g

  • Android打印机--小票打印格式及模板设置实例代码

    小票打印就是向打印设备发送控制打印格式的指令集,而这些打印格式需要去查询对应打印机的API文档,这里我把常用的api给封装了一下 文字对齐方式 打印字体大小 字体是否加粗 打印二维码 打印条形码 切纸 打开钱箱 字符串转字节数组 字符拼接 PrintFormatUtils.Java /** * 打印格式 * Created by john on 17-3-23. */ public class PrintFormatUtils { // 对齐方式 public static final int

  • Python调用Windows命令打印文件

    1.Python调用Windows命令打印文件 Windows命令行打印文件使用print 命令,具体用法可使用help print查看.下面是使用Python调用print指令执行打印文件功能的代码: import os def printer(filename): printername = r"/D:\\A340\hpLaser" cmd = "print " + printername + " " + filename print &qu

  • 打印机无法打印的故障处理

    "无法打印"大多是由于打印机使用.安装.设置不当造成的,病毒.打印机损坏.打印机端口有故障也会导致打印机无法打印.如果打印机在 Windows 9x中无法打印,可按如下步骤检查处理: 1.首先检查打印机是否处于联机状态,在大多数打印机上,"OnLine"按钮旁边都有一个指示联机状态的小灯,正常情况该联机指示灯应处于常亮状态.如果该指示灯不亮或处于闪烁状态,说明联机不正常.请检查打印机电源是否接通.打印机电源开关是否打开.打印机电缆是否正确连接等. 2.如果联机指示灯

  • 模拟打印机排队打印效果

    package com.cooly; import java.util.LinkedList; /** * @author coolyqq *模拟打印打印机排队打印 *分发类 */ public class DataDistribute { private static DataDistribute instance = null; private final static byte[] obj = new byte[0];//锁机制 private LinkedList<DataDistrib

  • python连接打印机实现打印文档、图片、pdf文件等功能

    引言 python连接打印机进行打印,可能根据需求的不同,使用不同的函数模块. 如果你只是简单的想打印文档,比如office文档,你可以使用ShellExecute方法,对于微软office的文档.pdf.txt等有用,你可以尝试下: 如果你输入某些数据,文字信息,就想直接把它发送给打印机打印,那么可以尝试使用win32print: 如果你有一张图片,那么你可以结合python的Python Imaging Library(PIL)和win32ui模块进行打印: 普通打印 ShellExecut

  • Java如何调用TSC打印机进行打印详解

    前言 最近项目中用到了打印机,最开始的完全不懂,现在弄好了,所以做了总结,该篇包括后台的调用打印(两种方式)跟前端的js的打印,但是只有IE现在支持打印,而且如果想远程连接打印机,二维码的生成和直接由打印机的命令进行操作,就要把修改浏览器的安全配置,下面再做详细的介绍 第一种后台打印:     使用javax中的PrintServiceLookup类进行打印,可以直接调用默认的打印机,也可以使用下列的方法进行筛选打印: PrintServiceLookup.lookupMultiDocPrint

  • js调用打印机打印网页字体总是缩小一号的解决方法

    今天要做一个打印网页的小功能,直接调用window.print(),但是打印出来后,字体总是缩小一号,找不到原因... 后来尝试用一个IE的打印控件,但仅支持ie有点恶心,只能返回去继续找原因 原来,我要打印的页面因为是哥弹出层,所以出现这种现象,后来直接target="_blank",就可以正常打印了. 另外, 复制代码 代码如下: function preview() { bdhtml=window.document.body.innerHTML; sprnstr="&l

随机推荐