针对上述情况,不同的软件有不同的处理方法,通常有以下两种:
1、事先检测数字位数,如果是奇数位,则在首位补0,如
1234567→01234567
2、在最后一个单个数字前转换字符集,如
start C 12 34 56 code B 7 check stop
按照第一种方法:
code变量改变为:
$code = '01234567';
再来计算code的esc指令即可。
第二种方法
$result = chr(12).chr(34).chr(56);
拼接指令:
$esc = '{C'.$result.'{B'.7;
如此,则完成了任意数字转换为CODE128C标准的ESC/POS指令。
优声云小票打印机是国内知名的小票打印机厂商,在对接优声云智能打印机的过程中,需要使用CODE128C编码,那么我们需要把条形码数据转换成打印机ESCPOS指令。接下来,我们介绍使用PHP把条码内容转换成ESC指令集。code128c介绍CODE128有三个版本:A(数字、大写字母、控制字符)B(数字、大小字母、字符)C(双位数字)CODE128A:标准数字和大写字母,控制符,特殊字符CODE128B:标准数字和大写字母,小写字母,特殊字符CODE128C:[00]-[99]的数字对集合,
爱普生ESCPOS-PHP
该项目允许您通过 PHP 打印到您的 EPSON 热敏打印机。 这已经在 Windows XP、Windows 7、Centos 和 Debian 以及 Raspberry PI 上进行了测试
我当前的设置是带有 ABElectronics 的 PI 串行适配器的 Raspberry PI 2
就软件而言,我已经在 Linux 上的 Apache2、Windows 上的 XAMPP 和 WAMP 上进行了这项工作 - 所有其他网络服务器都应该支持这一点!
这支持所有版本的 EPSON 串行打印机。 在我测试的主要部分,我使用的是 TM88III、TM88IV 打印机。
#安装和配置#Windows:COM1
#LINUX:
/dev/ttyS1
For linux devices it is best to do: dmesg |
热敏小票/标签打印机,使用ESC/POS指令打印,常用指令封装,适用于GBK编码
const PER_MM=8,//每毫米像素数
fontSize=12,//每字符像素数
gbk=require('./gbk'),//兼容中文的字符转换库,文末附链接
/*计算字符串长度(1个中文=2个字符)*/
charLen=str=>{
let width=0;
for(let i=0;i<str.length;i++){
width+=gbk.isAscii(str.charCodeAt(
private $unit_width = 1; //单位宽度 缺省1个象素
private $is_set_height = false;
private $width = -1;
private $heith = 35;
private $quiet
适用于PHP的ESC / POS打印驱动程序
该项目为热敏票据打印机实现了Epson ESC / POS协议的子集。 它使您可以在兼容的打印机上生成和打印带有基本格式,剪切和条形码的收据。
开发该库是为了向任何PHP应用程序(包括基于Web的销售点(POS)应用程序)添加对收据打印的直接支持。
接口和操作系统
已知此驱动程序可用于以下OS /接口组合:
Linux
USB串行
SMB分享了
托管CUPS
许多热敏票据打印机在某种程度上都支持ESC / POS。 已知该驱动程序可用于:
3nStar RPT-008
约APPPOS80AM
AURES ODP-333
AURES ODP-500
Bematech-4200-TH
Bematech LR2000E
桦木PRP-085III
Bixolon SRP-350III
Bixolon SRP-350Plus
黑铜BC-85AC
冠泰TH-305N
公民CBM1000-II
公民CT-S
一:插件安装
在php中我们可以使用php-barcode-generator插件来生成条形码,php-barcode-generator插件github地址:https://github.com/picqer/php-barcode-generator
composer require picqer/php-barcode-generator
二:php-barcode-generato...
因工作需要,需要在pos结款小票上打印条码,一开始想到控件方式实现,但是这种方式不太稳定,而且速度较慢。因为使用的热敏打印机是EPSON TM-58型打印机,所以想到了可以使用ESC/POS命令来实现条码的打印,这种方式不但速度快,而且可以在所有兼容ESC/POS指令集的打印机上通用,并且不涉及控件调用的问题,方便移植到不同的平台。
本文主要以CODE128 C编码举例,其他编码大同小异,需要了
const ESC="\x1b";//设置
const GS="\x1d";//页面设置 字体大小17倍数
const HT="\x09";//跳格设置 9,17,25,33,41
const CUT="\x1d";//切纸
const LF="\x0a";//打印缓冲区并换行
//网口小票打印机IP,连接端口
const PRINTER_IP="192.168.1.150"...
string printerName = "Your Printer Name";
// 创建打印对象
PrintDocument pd = new PrintDocument();
pd.PrinterSettings.PrinterName = printerName;
// 设置打印事件
pd.PrintPage += (sender, e) =>
// 设置打印区域
int x = 0, y = 0;
int width = 500, height = 600;
// 画边框
e.Graphics.DrawRectangle(Pens.Black, x, y, width, height);
// 打印条码
string barcodeData = "1234567890";
Code128BarcodeDraw barcodeDraw = BarcodeDrawFactory.Code128WithChecksum;
Image barcodeImage = barcodeDraw.Draw(barcodeData, 60);
// 计算条码位置
int barcodeX = x + (width - barcodeImage.Width) / 2;
int barcodeY = y + (height - barcodeImage.Height) / 2 - 50;
// 绘制条码
e.Graphics.DrawImage(barcodeImage, barcodeX, barcodeY);
// 打印文字
Font font = new Font("Arial", 12);
string text = "Label Text";
SizeF textSize = e.Graphics.MeasureString(text, font);
int textX = x + (width - (int)textSize.Width) / 2;
int textY = y + height - (int)textSize.Height - 10;
e.Graphics.DrawString(text, font, Brushes.Black, textX, textY);
// 开始打印
pd.Print();
public static class BarcodeDrawFactory
private static Lazy<BarcodeDraw> lazy = new Lazy<BarcodeDraw>(() => BarcodeDrawFactory.SVGDrawer);
public static BarcodeDraw Default
get { return lazy.Value; }
public static BarcodeDraw Code128WithChecksum
get { return new BarcodeDrawCode128Checksum(); }
public static BarcodeDraw SVGDrawer
get { return new BarcodeDrawSVG(); }
这段代码使用了一个名为 `BarcodeDraw` 的库,它可以帮助我们创建条码。在这个例子中,我们创建了一个 CODE128 条码,并将其放置在标签的中央。同时,我们还打印了一些文本,以及一个边框。
请注意将 `Your Printer Name` 替换为您的打印机名称。另外,您需要在项目中导入 `BarcodeLib` 库。您可以通过 NuGet 安装它。