我有一串打印机转义序列(ESC / P)需要发送到Mac OS X上的打印机(USB或网络)。我该怎么办?直接使用CUPS是最好的方法吗?是否有“更高层次”的方式?
在您提出问题之前:我确实需要发送转义序列,而不能简单地使用高级打印系统。
编辑:这些是在Java等其他语言中提供类似功能的一些项目和资源:
答案 0 :(得分:3)
我认为最好的方法是使用CUPS / lp:
echo "ctrl_char" | cat file_to_print - | lp [...flags...]
答案 1 :(得分: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文档中有足够的东西来完成你的任务。
祝你好运!答案 2 :(得分:2)
我们使用脚本(在专业的自动化End Of Line产品测试仪中)从Mac bash shell打印。
非常简化"您好"标签打印如下:
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
请注意,您必须使用自己的打印机名称替换打印机名称。