C# 控制TSC打印机功能
核心代码
public class PrinterHelper{/// <summary>/// 更新线程/// </summary>Thread m_Thread;/// <summary>/// 线程阻塞/// </summary>AutoResetEvent m_ResetEvent = new AutoResetEvent(true);/// <summary>/// 是否工作/// </summary>bool m_ThreadIsWork = false;/// <summary>/// 是否阻塞/// </summary>bool m_ThreadIsPause = true;/// <summary>/// 服务器状态/// </summary>public delegate void PrinterStatusEventDelegate(int Status, string Message);/// <summary>/// 服务器状态/// </summary>public event PrinterStatusEventDelegate PrinterStatus;/// <summary>/// 打印机名称/// </summary>private static string m_PrinterName = string.Empty;public PrinterHelper(string PrinterName){m_PrinterName = PrinterName;this.m_Thread = new Thread(new ThreadStart(this.WorkThreedFun));this.m_Thread.IsBackground = true;this.m_Thread.Start();this.m_ThreadIsWork = true;this.m_ThreadIsPause = false;this.m_ResetEvent.Set();}[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) /// 说明:使用Windows TTF字型列印文字/// 参数: /// a:整数型别,文字X方向起始点,以点(point)表示。 /// b:整数型别,文字Y方向起始点,以点(point)表示。 /// c:整数型别,字体高度,以点(point)表示。 /// d:整数型别,旋转角度,逆时钟方向旋转 /// 0 -> 0 degree /// 90-> 90 degree /// 180-> 180 degree /// 270-> 270 degree/// e:整数型别,字体外形 /// 0->标准(Normal)/// 1->斜体(Italic)/// 2->粗体(Bold)/// 3->粗斜体(Bold and Italic)/// f:整数型别,底线 /// 0->无底线 /// 1->加底线/// g:字串型别,字体名称。如: Arial, Times new Roman,细名体,标楷体/// h:字串型别,列印文字内容。 /// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <param name="fontheight"></param>/// <param name="rotation"></param>/// <param name="fontstyle"></param>/// <param name="fontunderline"></param>/// <param name="szFaceName"></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>private void WorkThreedFun(){while (true){if (this.m_ThreadIsPause || !this.m_ThreadIsWork){this.m_ResetEvent.WaitOne();}System.Threading.Thread.Sleep(10);this.DoWork();}}private void DoWork(){//int i = openport(m_PrinterName);int status = usbportqueryprinter();string Hex = status.ToString("X6");int rStatus = 14;string strStatus = string.Empty;switch (Hex){case "000000":rStatus = 0;strStatus = "准备就绪";break;case "000001":rStatus = 1;strStatus = "打印头开启";break;case "000002":rStatus = 2;strStatus = "纸张卡纸";break;case "000003":rStatus = 3;strStatus = "打印头开启并且纸张卡纸";break;case "000004":rStatus = 4;strStatus = "纸张缺纸";break;case "000005":rStatus = 5;strStatus = "打印头开启并且纸张缺纸";break;case "000008":rStatus = 6;strStatus = "无碳带";break;case "000009":rStatus = 7;strStatus = "打印头开启并且无碳带";break;case "00000A":rStatus = 8;strStatus = "纸张卡纸并且无碳带";break;case "00000B":rStatus = 9;strStatus = "打印头开启、纸张卡纸并且无碳带";break;case "00000C":rStatus = 10;strStatus = "纸张缺纸并且无碳带";break;case "000010":rStatus = 11;strStatus = "暂停";break;case "000020":rStatus = 12;strStatus = "打印中";break;case "000080":rStatus = 13;strStatus = "其它错误";break;default:rStatus = 14;strStatus = "未知";break;}this.PrinterStatus?.Invoke(rStatus, strStatus);//System.Diagnostics.Debug.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff") + ":" + status);}public static int SetCommand(string HexString){int dvopenPort = openport(m_PrinterName);byte[] bytes = HexStrToByte(HexString);var r = sendBinaryData(bytes, bytes.Length);closeport();return r;}private static byte[] HexStrToByte(string HexString){HexString = HexString.Replace(" ", "");if (HexString.Length % 2 != 0){HexString += " ";}byte[] returnBytes = new byte[HexString.Length / 2];for (int i = 0; i < returnBytes.Length; i++){returnBytes[i] = Convert.ToByte(HexString.Substring(i * 2, 2).Trim(), 16);}return returnBytes;}public static void TestPrint(){int dvopenPort = openport(m_PrinterName);sendcommand("DIRECTION 1");//设置标签大小 mmsendcommand("SIZE 76mm" + ",130mm");//设置打印速度 英寸每秒 1-10sendcommand("SPEED 10");//清除打印机缓存clearbuffer();//此条指令用来定义不同的国码编码。string BarCode = "123456";sendcommand("CODEPAGE UTF-8");sendcommand("OFFSET 5mm");sendcommand(string.Format("TEXT 140,50,\"SourceHa.TTF\",0,10,10,\"当前操作:打印测试页\""));sendcommand("TEXT 80,100,\"SourceHa.TTF\",0,14,14,\"----------------------------------\"");sendcommand("TEXT 120,160,\"SourceHa.TTF\",0,10,10,\"*********************\"");sendcommand("TEXT 80,200,\"SourceHa.TTF\",0,14,14,\"----------------------------------\"");sendcommand("TEXT 220,250,\"SourceHa.TTF\",0,13,13,\"菩萨蛮 温庭筠\"");sendcommand("TEXT 200,300,\"SourceHa.TTF\",0,13,13,\"玉楼明月长相忆,\"");sendcommand("TEXT 200,350,\"SourceHa.TTF\",0,13,13,\"柳丝袅娜春无力。\"");sendcommand("TEXT 200,400,\"SourceHa.TTF\",0,13,13,\"门外草萋萋,\"");sendcommand("TEXT 200,450,\"SourceHa.TTF\",0,13,13,\"送君闻马嘶。\"");sendcommand("TEXT 200,500,\"SourceHa.TTF\",0,13,13,\"画罗金翡翠,\"");sendcommand("TEXT 200,550,\"SourceHa.TTF\",0,13,13,\"香烛销成泪。\"");sendcommand("TEXT 200,600,\"SourceHa.TTF\",0,13,13,\"花落子规啼,\"");sendcommand("TEXT 200,650,\"SourceHa.TTF\",0,13,13,\"绿窗残梦迷。\"");sendcommand("TEXT 120,700,\"SourceHa.TTF\",0,13,13,\"0001-0000-0010-0100\"");sendcommand("TEXT 80,750,\"SourceHa.TTF\",0,14,14,\"----------------------------------\"");barcode("180", "800", "128", "128", "1", "0", "2", "2", BarCode);sendcommand("TEXT 80,900,\"SourceHa.TTF\",0,14,14,\"----------------------------------\"");windowsfont(110, 950, 32, 0, 0, 0, "SourceHa.TTF", "测试打印时间" + DateTime.Now.ToString());printlabel("1", "1");closeport();}public static void AddJob(int index){int dvopenPort = openport(m_PrinterName);sendcommand("DIRECTION 1");//设置标签大小 mmsendcommand("SIZE 76mm" + ",130mm");//设置打印速度 英寸每秒 1-10sendcommand("SPEED 10");//清除打印机缓存clearbuffer();//此条指令用来定义不同的国码编码。string BarCode = "123456";sendcommand("CODEPAGE UTF-8");sendcommand("OFFSET 5mm");sendcommand(string.Format("TEXT 140,50,\"SourceHa.TTF\",0,10,10,\"当前操作:打印测试页{0}\"", index));sendcommand("TEXT 80,100,\"SourceHa.TTF\",0,14,14,\"----------------------------------\"");sendcommand("TEXT 120,160,\"SourceHa.TTF\",0,10,10,\"*********************\"");sendcommand("TEXT 80,200,\"SourceHa.TTF\",0,14,14,\"----------------------------------\"");sendcommand("TEXT 220,250,\"SourceHa.TTF\",0,13,13,\"菩萨蛮 温庭筠\"");sendcommand("TEXT 200,300,\"SourceHa.TTF\",0,13,13,\"玉楼明月长相忆,\"");sendcommand("TEXT 200,350,\"SourceHa.TTF\",0,13,13,\"柳丝袅娜春无力。\"");sendcommand("TEXT 200,400,\"SourceHa.TTF\",0,13,13,\"门外草萋萋,\"");sendcommand("TEXT 200,450,\"SourceHa.TTF\",0,13,13,\"送君闻马嘶。\"");sendcommand("TEXT 200,500,\"SourceHa.TTF\",0,13,13,\"画罗金翡翠,\"");sendcommand("TEXT 200,550,\"SourceHa.TTF\",0,13,13,\"香烛销成泪。\"");sendcommand("TEXT 200,600,\"SourceHa.TTF\",0,13,13,\"花落子规啼,\"");sendcommand("TEXT 200,650,\"SourceHa.TTF\",0,13,13,\"绿窗残梦迷。\"");sendcommand("TEXT 120,700,\"SourceHa.TTF\",0,13,13,\"0001-0000-0010-0100\"");sendcommand("TEXT 80,750,\"SourceHa.TTF\",0,14,14,\"----------------------------------\"");barcode("180", "800", "128", "128", "1", "0", "2", "2", BarCode);sendcommand("TEXT 80,900,\"SourceHa.TTF\",0,14,14,\"----------------------------------\"");windowsfont(110, 950, 32, 0, 0, 0, "SourceHa.TTF", "测试打印时间" + DateTime.Now.ToString());printlabel("1", "1");closeport();}}
完成打印机指令控制打印机函数:
[DllImport("TSCLIB.dll", EntryPoint = "sendBinaryData")]public static extern int sendBinaryData(byte[] content, int length);
发送打印机指令
i.e <ESC>!P和<ESC>!O,分别暂停打印、取消暂停
注意<ESC>为跳脱符号,使用sendBinaryData发送指令接受的为byte[]数据类型
代码参考:
string Hex = "1B 21 50"; //<ESC>!P暂停
string Hex = "1B 21 4F"; //<ESC>!O解除暂停
byte[] sendBytes = HexStrToByte(Hex);
var r = sendBinaryData(sendBytes, sendBytes.Length);
许多朋友使用的是sendcommand函数,是只能发送命令,而不能发送指令内容!!!
sendcommand 支持TSC文档:系统指令、标签内容打印命令、设备配置指令等
sendBinaryData支持TSC文档:状态获取及立即指令、信息传送、驱动指令、文件管理指令、基础指令及函数等
TSC包含命令与指令,文档有很明确的说明。
TSCLIB 下载地址
C# 控制TSC打印机功能相关推荐
- 佳博 TSC打印机 TSPL指令开发
如何在电脑上使用C# 调用佳博 TSC打印机指令控制打印 踩了不少坑 跟大家分享下开发需要注意的地方 1. 佳博和TSC的 BARCODE 指令有出入,TSC多了一个参数,直接用佳博的打印是扫码不出二 ...
- delphi控制POS打印机
delphi控制POS打印机 delphi控制POS打印机 RPrinter为TextFile类型: SContent为TStringList类型. // 建立打印连接并打印数据 Assignfile ...
- 开启共享文件夹/共享打印机功能
适用于:Windows 10 神州网信政府版 概要: 基于GB/T 30278-2013 <信息安全技术政务计算机终端核心配置规范>的要求对Windows 10神州网信政府版(以下简称CM ...
- TSC打印机打印条形码和二维码,applet实现方式
applet方式实现TSC打印条码功能. applet方式打印实现复杂,最大的优点就是不用注册 dll 控件,不过现在最新的浏览器已经不支持java了,不建议使用,以下内容仅供参考. 说明: 1.ap ...
- delphi android 打印机,用delphi控制小票打印机打印图片
用delphi控制小票打印机打印图片 unit PosPrintBmp; {************************************************************** ...
- 使用ZPL控制Zebra打印机
ZPL简介: Zebra编程语言 (ZPL)是所有 ZPL 兼容打印机使用的命令语言.可用于绘制文本.形状.条形码和图像等元素,组合这些元素.打印机使用它作为指令来创建打印在标签上的图像. 想要打印一 ...
- Android 连接 TSC打印机, 打印标签(文字、图片)
TSC选配模式有三 :以太网(WiFi).蓝牙.USB ,并提供了开发文档 1.先去官网下载,Android SDK SDK 中包含,三种模式 ,不必逐个下载了,文档中有对 接口很详细的解释 解压如下 ...
- JAVA调用TSC打印机打印标签(二维码,数据等)超详细!!
本文打印机型号: TSC MA3400P 后端调用tsc打印机是通过DLL来进行调用的,首先你需要两个TSC文件直接复制到项目目录下边即可 可以直接去官网下载:https://www.chinatsc ...
- java 调用TSC打印机
JNA 依赖 <dependency><groupId>com.sun.jna</groupId><artifactId>jna</artifac ...
最新文章
- LeetCode-双指针-88. 合并两个有序数组
- 【存储知识学习】第三章磁盘原理与技术3.10 固态存储介质和固态硬盘-《大话存储》阅读笔记
- Linux_linux常用工具---闲杂篇(除了vim, 还有哪些常用的牛逼的编辑器, 并能够横向对比编辑器之间的区别和优缺点.)
- ZOJ 3631 Watashi's BG
- 图像分类_02神经网络(NN)简介:定义+ 感知机+历史
- 04_NaiveBayes_统计学习方法
- 盘点 | 2017 年关于 Python 的 12 件大事
- 计算两个经纬度之间的距离软件_小程序使用腾讯位置服务计算两地之间的距离(有源码)...
- 暴风影音硬件加速播放高清影片
- vb 链接 oracle数据库,vb 连接oracle数据库
- hcfax2e伺服驱动器说明书_伺服电机说明书
- 对比Excel学openpyxl系列之批注、文档保护、冻结窗格
- [Linux]history命令用法详解
- Prometheus+Grafana监控告警配置
- 运维企业实战——RHCS集群套件 实现高可用
- VS如何关闭控制台Console
- 付呗聚合支付快速教程 基础篇①——基本介绍和配置
- C语言学生成绩管理系统源代码
- cap文件的格式说明
- 通过URL下载HTML页面