iOS上的AirPrint:如何将RAW数据发送到Boca打印机?

时间:2012-05-14 22:34:39

标签: ios airprint thermal-printer raw-data

我正在编写一个需要使用Boca热敏打印机进行打印的iOS应用程序。他们使用专有语言(FGL)以ASCII字符串形式的命令布局内容。我已经使用可以免费下载的AirPrint激活工具为Boca打印机启用了AirPrint。

我的问题是使用UIPrintInteractionController,我所能做的就是发送已经格式化的文本(BOCA将无法识别FGL命令,将它们打印为正常文本)或NSData需要有一个PDF标题(我的数据没有,所以我不能用这种方式打印)。

有没有办法绕过这个框架并将原始ASCII数据发送到打印机?我应该使用NSStream并以低级别方式管理打印作业吗?

在这种情况下,有没有办法在网络上获取打印机的地址,以便我可以与它建立套接字连接?

4 个答案:

答案 0 :(得分:3)

听起来好像你需要第三方图书馆或自己写一个

但是我不确定网络打印机的内部功能,但我就是你,我会问自己:

  • 打印机是否将其IP地址广播到网络?
  • 如果没有提供什么功能,使其可自行发现 到其他设备?
  • 打印机是否响应来自的特定广播消息 想要连接它的设备?
  • 它是否完全依赖UDP或TCP数据包?

如果您可以与他们的客户服务联系,如果没有在网上记录,您可以获得这些信息。

抱歉,我无法直接回复您,但希望这些问题可以帮助您找到答案

答案 1 :(得分:2)

大多数打印机都具有某种自检功能,可以打印有关打印机的一些信息,包括它的IP地址。看看它是否在网上提到了手册。它通常类似于在打开时按住进纸按钮。获得IP地址后,打开与它的连接并发送数据应该非常简单。

答案 2 :(得分:1)

机会是OP已经取消了这个,但是在StackOverflow的精神上就这个利基问题......

如果您知道打印机的IP地址(可以使用打印机上的某个按钮通过测试打印找到),您可以通过端口9100上的TCP套接字发送FGL命令。我使用过{ {3}}用于通过以太网连接的BOCA热敏打印机。

假设您的应用程序包中包含FGL命令的文本文件位于Tickets/test.txt,则实现此目的的代码(在Swift中)是:

let client:FastSocket = FastSocket(host: PRINTER_IP_ADDRESS, andPort: "9100")
client.connect()

let ticketPath:String! = NSBundle.mainBundle().pathForResource("test", ofType: "txt", inDirectory: "Tickets")
let count:Int = client.sendFile(ticketPath)

// Do some error checking here

client.close()

等效的Objective-C代码应该很容易解决。

由于FastSocket同步执行上述命令,请确保在后台线程中运行上述代码以防止UI冻结。

答案 3 :(得分:0)

您可以尝试external accesory framework将数据发送到打印机。它用于连接外部外围设备。可能这就是你要找的东西。