【问题标题】:ESC/POS PHP Barcode PrintingESC/POS PHP 条码打印
【发布时间】:2014-01-17 07:20:31
【问题描述】:

我对 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 命令集兼容。我错过了什么吗?

【问题讨论】:

    标签: php thermal-printer barcode-printing


    【解决方案1】:

    目前你正在尝试解决四个问题:

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

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

    3) 使用 PHP 实现您的系统

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

    一次只处理一个问题会让你的生活变得更简单。

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

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

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

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

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

    【讨论】:

    • 感谢您的回答。我尝试了 CUPS,但无法让打印机打印任何有意义的东西,除非使用纯文本“驱动程序”。这个东西最终将连接到带有 Ubuntu 12.04 的 Alix2 路由器板,所以是的,如果我设法让它工作,我可能会使用 CUPS。 PHP 在这里无关紧要,因为我只是用它来测试东西,但它不会是我将在生产中使用的东西。我会尝试打印作业,我会再尝试使用 CUPS,是否有可以下载和安装的通用 ESC/POS 配置文件?
    • 如何让 PHP 与打印机对话? o.O
    • @CodeGuru PHP 是一种通用编程语言。它支持 exec 和 shell 调用,它可以打开管道和套接字。在类 unix 系统中,这就是与打印机等外围设备通信所需的全部内容。
    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2016-01-12
    • 2020-02-11
    • 2013-07-01
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多