如何将低级转义序列发送到OS X上的打印机?

时间:2012-07-18 12:10:32

标签: macos cocoa printing low-level epson

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

在您提出问题之前:我确实需要发送转义序列,而不能简单地使用高级打印系统。

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

3 个答案:

答案 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

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