我正在编写一个需要使用Boca热敏打印机进行打印的iOS应用程序。他们使用专有语言(FGL)以ASCII字符串形式的命令布局内容。我已经使用可以免费下载的AirPrint激活工具为Boca打印机启用了AirPrint。
我的问题是使用UIPrintInteractionController
,我所能做的就是发送已经格式化的文本(BOCA将无法识别FGL命令,将它们打印为正常文本)或NSData
需要有一个PDF标题(我的数据没有,所以我不能用这种方式打印)。
有没有办法绕过这个框架并将原始ASCII数据发送到打印机?我应该使用NSStream
并以低级别方式管理打印作业吗?
在这种情况下,有没有办法在网络上获取打印机的地址,以便我可以与它建立套接字连接?
答案 0 :(得分:3)
听起来好像你需要第三方图书馆或自己写一个
但是我不确定网络打印机的内部功能,但我就是你,我会问自己:
如果您可以与他们的客户服务联系,如果没有在网上记录,您可以获得这些信息。
抱歉,我无法直接回复您,但希望这些问题可以帮助您找到答案
答案 1 :(得分:2)
大多数打印机都具有某种自检功能,可以打印有关打印机的一些信息,包括它的IP地址。看看它是否在网上提到了手册。它通常类似于在打开时按住进纸按钮。获得IP地址后,打开与它的连接并发送数据应该非常简单。
答案 2 :(得分:1)
如果您知道打印机的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将数据发送到打印机。它用于连接外部外围设备。可能这就是你要找的东西。