首页 > 编程语言 >c#调用TSC打印机进行打印

c#调用TSC打印机进行打印

时间:2024-05-28 14:31:55浏览次数:36  
标签:打印机 string c# TSC dll int windowsfont TSCLIB public

需求背景

业务打印需求需要使用TSC打印机进行条码二维码打印(由旧项目改造触发的需求)

前期准备

vs2022+WORK Service+TSCLIB.DLL

使用方式及部分代码示例

创建一个类PrinterHelper.cs。类中来使用TSCLIB进行模版的编辑及调用打印机进行打印。在需要使用打印功能的地方调用打印方法

dll调用代码如下:

[DllImport("TSCLIB.dll", EntryPoint = "about")]
public static extern int about();

[DllImport("TSCLIB.dll", EntryPoint = "openport")]
public static extern int openport(string printername);

[DllImport("TSCLIB.dll", EntryPoint = "barcode")]
public static extern int barcode(string x, string y, string type,
            string height, string readable, string rotation,
            string narrow, string wide, string code);

[DllImport("TSCLIB.dll", EntryPoint = "clearbuffer")]
public static extern int clearbuffer();

[DllImport("TSCLIB.dll", EntryPoint = "closeport")]
public static extern int closeport();

[DllImport("TSCLIB.dll", EntryPoint = "downloadpcx")]
public static extern int downloadpcx(string filename, string image_name);

[DllImport("TSCLIB.dll", EntryPoint = "formfeed")]
public static extern int formfeed();

[DllImport("TSCLIB.dll", EntryPoint = "nobackfeed")]
public static extern int nobackfeed();

[DllImport("TSCLIB.dll", EntryPoint = "printerfont")]
public static extern int printerfont(string x, string y, string fonttype,
                string rotation, string xmul, string ymul,
                string text);

[DllImport("TSCLIB.dll", EntryPoint = "printlabel")]
public static extern int printlabel(string set, string copy);

[DllImport("TSCLIB.dll", EntryPoint = "sendBinaryData")]
public static extern int sendBinaryData(byte[] content, int length);

//功能:繪製QRCODE二維條碼
//語法:
//QRCODE X, Y, ECC Level, cell width, mode, rotation, [model, mask,]"Data string”
//參數說明
//X QRCODE條碼左上角X座標
//Y QRCODE條碼左上角Y座標
//ECC level 錯誤糾正能力等級
//L 7%
//M 15%
//Q 25%
//H 30%
//cell width    1~10
//mode  自動生成編碼/手動生成編碼
//A Auto
//M Manual
//rotation  順時針旋轉角度
//0 不旋轉
//90    順時針旋轉90度
//180   順時針旋轉180度
//270   順時針旋轉270度
//model 條碼生成樣式
//1 (預設), 原始版本
//2 擴大版本
//mask  範圍:0~8,預設7
//Data string   條碼資料內容
//string printercommand = "QRCODE 176,8,Q,8,A,0,M2,S7,\"" + barCode + "\"";
[DllImport("TSCLIB.dll", EntryPoint = "sendcommand")]
public static extern int sendcommand(string printercommand);

/// <summary>
///   宽度、高度、速度、浓度
//    sensor为0:vertical 垂直间距距离 offset垂直间距的偏移
//    sensor为1:vertical定义黑标高度和额外送出长度 offset黑标偏移量
/// </summary>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="speed">列印速度,1~6,6为最快速度</param>
/// <param name="density">打印浓度,1-15,数字越大越黑</param>
/// <param name="sensor"></param>
/// <param name="vertical"></param>
/// <param name="offset"></param>
/// <returns></returns>
[DllImport("TSCLIB.dll", EntryPoint = "setup")]
public static extern int setup(string width, string height, string speed, string density, string sensor, string vertical, string offset);

/// <summary>
/// windowsfont(a,b,c,d,e,f,g,h) 
/// </summary>
/// <param name="x">整数型别,文字X方向起始点,以点(point)表示。 </param>
/// <param name="y">整数型别,文字Y方向起始点,以点(point)表示。</param>
/// <param name="fontheight">整数型别,字体高度,以点(point)表示。 因为是用java改造过来的,所以字体大小需要用原本的java设置的大小*0.8571并向上取整取偶数IsEven该方法就是进行原大小*0.8571向上取整取偶数</param>
/// <param name="rotation">整数型别,旋转角度,逆时钟方向旋转   0 -> 0 degree   90-> 90 degree  180-> 180 degree  270-> 270 degree</param>
/// <param name="fontstyle">整数型别,字体外形 0->标准(Normal) 1->斜体(Italic) 2->粗体(Bold) 3->粗斜体(Bold and Italic)</param>
/// <param name="fontunderline">整数型别,底线  0->无底线 1->加底线</param>
/// <param name="szFaceName">字串型别,字体名称。如: Arial, Times new Roman,细名体,标楷体</param>
/// <param name="content">字串型别,列印文字内容。 </param>
/// <returns></returns>
[DllImport("TSCLIB.dll", EntryPoint = "windowsfont")]
public static extern int windowsfont(int x, int y, int fontheight,
                int rotation, int fontstyle, int fontunderline,
                string szFaceName, string content);

/// <summary>
/// 获取打印机状态,
/// </summary>
/// <returns></returns>
/// 0=待机中
/// 1=印字头开启
/// 2=卡纸
/// 3
/// 4 =缺纸
/// 10= 暂停中
/// 20 =列印中
[DllImport("TSCLIB.dll", EntryPoint = "usbportqueryprinter")]
public static extern int usbportqueryprinter();

模版及调用打印如下:

/// <summary>
        /// 
        /// </summary>
        /// <param name="engineCode"></param>
        /// <param name="mac"></param>
        /// <param name="printContentInfo"></param>
        /// <returns></returns>
        public List<PrintResult> waimaoYbd1(string Code)
        {

                        ///打开打印机
                        openport("打印机名称");
                        setup("102", "152", "0", "15", "0", "2", "0");

                        ///清除打印机缓存
                        clearbuffer();
                        sendcommand("DIRECTION 0");
                        //图片地址:物理路径,暂不清楚能否从远程服务器拿取图片
                        downloadpcx(DllPath + "wmfdj.pcx", "wmfdj.pcx");
                        sendcommand("PUTPCX 1,1,\"wmfdj.pcx\"");

                        windowsfont(118, 146, 45, 0, 0, 0, "Arial", "内容填充");

                        windowsfont(513, 194, 97, 0, 0, 0, "Helvetica-Roman-SemiB", "内容填充");
                        windowsfont(30, 356, 34, 0, 0, 0, "Arial", "内容填充");
                        windowsfont(30, 402, 34, 0, 0, 0, "Arial", "内容填充");

                        windowsfont(392, 466, 30, 0, 0, 0, "Arial", "内容填充");
                        windowsfont(392, 514, 30, 0, 0, 0, "Arial", "内容填充");

                        windowsfont(158, 797, 20, 0, 0, 0, "Arial", "内容填充");
                        windowsfont(447, 797, 20, 0, 0, 0, "Arial", "内容填充");
                        windowsfont(158, 837, 20, 0, 0, 0, "Arial","内容填充");
                        windowsfont(447, 837, 20, 0, 0, 0, "Arial", "内容填充");
                        windowsfont(158, 872, 20, 0, 0, 0, "Arial", "内容填充");
                        windowsfont(447, 872, 20, 0, 0, 0, "Arial", "内容填充");

                        barcode("58", "1000", "128", "65", "0", "0", "2", "4",Code);
                        windowsfont(58, 1070, 36, 0, 2, 0, "Arial", Code);
                        ///二维码地址
                        string url = ACTIVE_URL + Code;
                        //此处"QRCODE 后边参数大小位置根据自行需求进行调整sendcommand包含各个参数介绍
                        string qrcode = "QRCODE 500,950,L,5,A,0,M2,S3,\"" + url + "\"";
                        sendcommand(qrcode);

                        ///启动打印
                        printlabel("1", "1");

                        ///关闭打印机
                        closeport();
        }

最后总结

总结:画模版麻烦,DLL无法正常引用到项目。以上就是c#使用TSC打印机进行条码及二维码打印的详细记录。资源下载:https://download.csdn.net/download/qq_43486995/89368559

标签:打印机,string,c#,TSC,dll,int,windowsfont,TSCLIB,public
From: https://blog.csdn.net/qq_43486995/article/details/139263002

相关文章

  • 什么?部署ClickHouse的服务器CPU利用率100%了?
    背景  某客户现场的ClickHouse所在服务器资源占用率100%了,引发了服务器告警。观察Grafana监控面板发现,从12点左右出现了大量的碎片写入,从而引起了相关指标的快速上升。  本文主要通过ClickHouse官方的系统表system.query_log表进行问题排查定位,结合Grafana监控面板最......
  • Linux使用脚本一键安装Oracle11g
    最近一直在搞服务器,记录下使用脚本安装Oracle数据库,仅供学习使用链接:https://pan.baidu.com/s/1Rrx5SeA-t8hKZW2ZqlqfZg 提取码:lss11.安装CentOS7虚拟机Linux2.修改IP(自动分配IP或者配置静态IP)cd/etc/sysconfig/network-scripts/ls查看文件(后续要使用ens33)修改ifvf......
  • 京东二面:为什么Netty要造FastThreadLocal?
    FastThreadLocal从字面意义上来看,它是“Fast”+“ThreadLocal”的结合体,寓意为快速的ThreadLocal。那么,问题来了,Netty为什么要再造一个FastThreadLocal?FastThreadLocal运行快的原因是啥?除了快之外,它还有其他优势吗?1.先从ThreadLocal说起ThreadLocal线程本地变量,每个线程都......
  • URLDecode
    PHP urldecode示例$str1=urlencode("百度");//$str1的值是%B0%D9%B6%C8$str2=urldecode($str1);//$str2的值就是“百度”javascripturl字符串编码和解码在JavaScript中,可以使用内置的encodeURIComponent函数来对URL进行编码,而使用decodeURIComponent函数来对URL进行解......
  • 工厂方法模式(Factory Method Pattern)
    工厂方法模式(FactoryMethodPattern)是一种创建型设计模式,它在父类中提供一个创建对象的方法,允许子类决定实例化哪一个类。工厂方法模式将对象的实例化推迟到子类中进行,使得系统在不修改原有代码的情况下可以扩展,从而实现了开闭原则(对扩展开放,对修改关闭)模式结构抽象工厂(Abstr......
  • 抽象工厂模式(Abstract Factory)
    抽象工厂模式(AbstractFactoryPattern)是一种创建型设计模式,它提供了一种方式,将一组具有共同主题的单独的工厂封装起来,而不需要指定它们的具体类。抽象工厂模式允许客户端在不指定具体类的情况下创建一系列相互关联或相互依赖的产品族。模式结构抽象工厂模式包含以下角色:抽象......
  • strcpy和memcpy
    strcpy和memcpy目录strcpy和memcpy复制内容:strcpy:专门用于复制字符串,它会一直复制直到遇到源字符串中的'\0'结束符。这意味着如果源字符串长度超过了目标缓冲区的大小(不包括'\0'),就会发生缓冲区溢出,这是一个常见的安全隐患。memcpy:可以复制任意内容,如字符数组、整型、结构体、......
  • 装饰器模式(Decorator)
    装饰器模式(DecoratorPattern)是一种结构型设计模式,它允许你动态地给一个对象添加一些额外的职责(即增加其功能),就增加功能来说,装饰器模式相比生成子类更为灵活。装饰器模式是一种对象结构型模式,在其结构图中含有一个作为抽象构件(Component)角色的接口和多个实现了该接口的抽象装饰类......
  • C++Primer Plus对象和类的练习,练习10.10类和对象 练习2默认参数和重载
    2.下面是一个非常简单的类定义:classPerson{private:staticconstLIMIT=25;stringlname;//Person’slastnamecharfname[LIMIT];//Person’sfirstnamepublic:Person()(lname=“”;fname[0]=0’;}//#1Person(conststring&ln,constchar*fn=“Heyyou”);//......
  • SD8906A恒定批量降压转换器集成电路IC同步整流器SOT封装
    该SD8906A是一个恒定频率,电流模式PWM降压转换器。该器件集成了一个主开关和一个同步整流器,无需外部肖特基二极管即可实现高效率。它是为单节锂离子(Li+)电池供电的便携式设备的理想选择。输出电压可调低至0.6V。该SD8906A还可以运行在100%的低压差操作占空比,延长便携式系统......