ESC / POS PHP条码打印

时间:2013-12-30 11:52:42

标签: php thermal-printer barcode-printing

我对ESC / POS事情全新,我环顾四周但找不到解决问题的方法。我正在尝试使用通用USB POS-58热敏打印机打印条形码,但打印机上显示的只是条形码数据,而不是条形码本身。我正在使用的代码如下:

$barcode = "12345678901";

$handle = fopen('/dev/usb/lp0', 'w');

if (!$handle) {
    echo 'Cannot open printer';
    exit(0);
}

fwrite($handle, chr(hexdec('1D')).'f'.chr(0)); 
fwrite($handle, chr(hexdec('1D')).'H'.chr(2)); 
fwrite($handle, chr(hexdec('1D')).'h'.chr(60)); 
fwrite($handle, chr(hexdec('1D')).'w'.chr(2)); 
fwrite($handle, chr(hexdec('1D')).'k'.chr(1)); 
fwrite($handle, $barcode.chr(0));
fwrite($handle, chr(hexdec('0A')));
fclose($handle);

请注意我使用的是PHP,但是从命令行(或C)使用printf得到了相同的结果。 我在打印机上得到的是

12345678901

根本没有条形码。打印机是否可能不支持条形码打印? “手册”不是很有用,它只是声明打印机与ESC / POS命令集兼容。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

目前,您正试图解决四个问题:

1)使用ESC / POS以打印机识别的格式编码数据

2)管理对多处理/多用户操作系统上的物理设备的访问

3)使用PHP实现您的系统

4)确定打印机上的命令集支持

通过一次处理一个问题,你将使你的生活变得更加简单。

你确实特别询问打印机是否(不)支持条形码 - 你必须检查手册/联系供应商 - 毕竟你为这件事付了他们的钱,不是吗?

从您的设备命名我认为您正在使用Linux / Unix / BSD。因此,我建议您首先创建静态文件来表示打印作业 - 您可以通过命令行将它们发送到打印机:

 cat print_sample_v1.0 >>/dev/usb/lp0

您可能考虑的另一件事是通过来自OpenOffice等应用程序的CUP打印到设备。这将允许您尝试不同的打印机仿真(但如果它是一个特别便宜的设备,那么您将需要使用大型栅格来条码以避免混叠)。

您不应该直接写入打印机端口。在单一任务系统(DOS,CP / M)上这很好,但迟早会遇到问题 - 这就是为什么在过去20年中编写的每个操作系统都有一个打印机假脱机程序。从PHP提交打印作业的最简单方法是生成临时文件和exec lpr。