我有一个字符串的打印机转义序列(ESC/p),需要发送到Mac OS X上的打印机(USB或网络)。我该怎么做?直接使用CUPS是最好的方式吗?有没有"更高层次"的方式?
在你问之前:我真的需要发送转义序列,不能简单地使用高级打印系统。
编辑:这些项目和资源在其他语言(如Java:)中提供了类似的功能
- http://code.google.com/p/escprinter/
- http://code.google.com/p/escprinter/source/browse/trunk/net/drayah/matrixprinter/ESCPrinter.java
- http://code.google.com/p/jzebra/
我想最好的方法就是使用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);
至于可打印数据本身,您可以使用核心打印。
使用此库,您可以使用任一
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
);
我很抱歉不能给出一个具体的代码示例,但我真的不确定你打算如何构建你想要发送到打印机的数据。这至少应该为你开始四处攻击提供一个基础。我相信上面提供的苹果文档中有足够的东西来完成你的任务。
祝你好运!
我们使用脚本从Mac bash shell打印(在专业的自动化产品测试仪中)。
非常简化的"你好"标签打印如下:
data="x1Biax00"
data="${data}x1B@"
data="${data}x1BXx32"
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
请注意,您必须将打印机名称替换为自己的打印机名称。