5

我有一串打印机转义序列 (ESC/P),需要发送到 Mac OS X 上的打印机(USB 或网络)。我该怎么做?直接使用 CUPS 是最好的方法吗?有没有“更高层次”的方式?

在你问之前:我确实需要发送转义序列并且不能简单地使用高级打印系统。

编辑:这些是在其他语言(如 Java)中提供类似功能的一些项目和资源:

4

3 回答 3

3

我想最好的方法就是使用 CUPS/lp:

echo "ctrl_char" | cat file_to_print - | lp [...flags...]
于 2012-08-09T03:30:15.980 回答
3

您可以使用 unix 系统调用在 C 中发送控制字符:

char escp_seq[BYTES_FOR_SEQUENCE];

// ...initialize the ESC/P sequence.

int printer_fd = open("/dev/lp0", O_WRONLY);
ssize_t bytes_written = write(printer_fd, escp_seq, sizeof(escp_seq));
close(printer_fd);

至于可打印数据本身,您可以使用Core Printing

使用这个库,您可以使用

OSStatus PMPrinterPrintWithProvider (
   PMPrinter printer,
   PMPrintSettings settings,
   PMPageFormat format,
   CFStringRef mimeType,
   CGDataProviderRef provider
);

这将要求您使用您的数据构造一个 CGDataProviderRef。

或者,您可以使用文件:

OSStatus PMPrinterPrintWithFile (
   PMPrinter printer,
   PMPrintSettings settings,
   PMPageFormat format,
   CFStringRef mimeType,
   CFURLRef fileURL
);

对于无法给出具体的代码示例,我深表歉意,但我真的不确定您打算如何构建您希望发送到打印机的数据。这至少应该为您开始破解提供了一个基础。我确信上面提供的 Apple 文档中有足够的东西来完成您的任务。

祝你好运!

于 2012-08-09T16:28:36.367 回答
3

我们正在使用脚本从 Mac bash shell 打印(在专业的自动化终端产品测试仪中)。

非常简化的“Hello”标签打印如下:

data="\x1Bia\x00"
data="${data}\x1B@"
data="${data}\x1BX\x32"
data="${data}Hello"
data="${data}\x0C"

# Check your own binary for debugging:
echo -ne $data | hexdump -C

# print the actual label
echo -ne $data | lp -d Brother_PT_P900W

请注意,您必须将打印机名称替换为您自己的打印机名称。

于 2017-12-05T14:21:32.590 回答