我有一串打印机转义序列 (ESC/P),需要发送到 Mac OS X 上的打印机(USB 或网络)。我该怎么做?直接使用 CUPS 是最好的方法吗?有没有“更高层次”的方式?
在你问之前:我确实需要发送转义序列并且不能简单地使用高级打印系统。
编辑:这些是在其他语言(如 Java)中提供类似功能的一些项目和资源:
我有一串打印机转义序列 (ESC/P),需要发送到 Mac OS X 上的打印机(USB 或网络)。我该怎么做?直接使用 CUPS 是最好的方法吗?有没有“更高层次”的方式?
在你问之前:我确实需要发送转义序列并且不能简单地使用高级打印系统。
编辑:这些是在其他语言(如 Java)中提供类似功能的一些项目和资源:
我想最好的方法就是使用 CUPS/lp:
echo "ctrl_char" | cat file_to_print - | lp [...flags...]
您可以使用 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 文档中有足够的东西来完成您的任务。
祝你好运!
我们正在使用脚本从 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
请注意,您必须将打印机名称替换为您自己的打印机名称。