ESC/POS PHP条码打印

ESC/POS PHP条码打印,php,thermal-printer,barcode-printing,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(he

我对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) 使用ESC/POS以打印机可以识别的格式对数据进行编码

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

3) 使用PHP实现您的系统

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

一次只处理一个问题,你的生活就会简单得多

你确实问过打印机是否(不)支持条形码-你必须检查手册/联系供应商-毕竟你为这件事花了很多钱,不是吗

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

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

另一件事,您可以考虑通过像OpenOffice这样的应用程序通过CUPS打印设备。这将允许您尝试不同的打印机模拟(但是如果它是一个特别便宜的设备,那么您需要为条形码使用一个大的光栅以避免混淆)


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

谢谢您的回答。我尝试了CUPS,但除了使用纯文本的“驱动程序”,打印机无法打印任何有意义的内容。这个东西最终将连接到一个带有Ubuntu 12.04的Alix2 Routboard,所以是的,如果我能让它工作的话,我可能会使用CUPS。PHP在这里是不相关的,因为我只是用它来测试一些东西,但它不是我将在生产中使用的东西。我将尝试打印作业,我将再次尝试CUPS,是否有一个通用的ESC/POS配置文件可以下载并安装?如何让PHP与打印机对话?o。O@CodeGuruPHP是一种通用编程语言。它支持exec和shell调用,可以打开管道和套接字。在类unix系统中,这就是与打印机等外围设备进行通信所需的全部内容。