2012-05-14 3 views
1

Я пишу приложение iOS, которое нужно печатать с использованием термального принтера Boca. Они используют собственный язык (FGL) для компоновки содержимого с командами в виде строк ASCII. Я уже включил AirPrint для принтера Boca, используя инструмент активации AirPrint, который можно скачать бесплатно.AirPrint на iOS: как отправить RAW-данные на принтер Boca?

Моя проблема заключается в том, что с помощью UIPrintInteractionController, все, что я могу сделать, это отправить либо уже отформатированный текст (BOCA будет не признавать команды FGL, печатая их, как если бы они были обычным текстом) или NSData который должен иметь заголовок PDF (которых у меня нет, поэтому я не могу напечатать этот путь).

Есть ли способ обойти эту структуру и отправить необработанные данные ASCII на принтер? Должен ли я использовать NSStream и управлять заданием печати на низком уровне?

В таком случае, есть ли способ получить адрес принтера в сети, чтобы я мог установить сокет-соединение с ним?

ответ

2

Это звучит так, как будто вам нужно либо библиотека третьей партии или написать одну самостоятельно

Но я не уверен, о внутренностях сетевой функции принтеров, но вы были я спрашиваю себя:

  • Передает ли принтер IP-адрес в сеть?
  • Если нет, то какую функциональность он снабжает, чтобы сделать его самонастраиваемым на другие устройства?
  • Отвечает ли принтер на конкретное широковещательное сообщение от устройства , которое хочет подключиться к нему?
  • Опирается ли это исключительно на UDP или TCP-пакеты?

Если вы можете связаться со службой поддержки клиентов, вы сможете получить эту информацию, если она не задокументирована в сети.

К сожалению я не могу дать вам прямой ответ, но, надеюсь, эти вопросы помогут вам найти ответ

0

Вы можете попробовать external accesory framework отправить данные на ваш принтер. Он используется для подключения внешних периферийных устройств. Наверное, это то, что вы ищете.

+0

«Структура внешнего аксессуара обеспечивает поддержку связи с внешним оборудованием, подключенным к устройству на базе iOS через 30-контактный разъем док-станции или беспроводным использованием Bluetooth». Извините, я забыл указать, что мне нужно использовать Wi-Fi. –

1

Большинство принтеров имеют функцию самотестирования, которая будет печатать некоторую информацию о принтере, включая его IP-адрес. Посмотрите, упоминает ли он это в онлайн-руководстве. Обычно это что-то вроде удержания кнопки подачи при включении. Когда у вас есть IP-адрес, довольно просто открыть соединение с ним и отправить его.

0

Скорее всего OP потянуло это прочь, но в духе StackOverflow по этой нише вопрос ... ...

Если вы знаете IP-адрес принтера (вы можете узнать это через тестовую печать с помощью одной из кнопок на вашем принтере), вы можете отправлять команды FGL через сокет TCP на порте 9100. I Для этого вы использовали FastSocket на BOCA Thermal Ticket Printer, подключенном через Ethernet.

Предполагая, что ваш текстовый файл, содержащий команды 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 выполняет указанные выше команды синхронно, убедитесь, что вы запустили вышеуказанный код в фоновом потоке, чтобы предотвратить зависание вашего пользовательского интерфейса.

Смежные вопросы