AirPrint на iOS: как отправить данные RAW на принтер Boca?

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

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

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

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


person Andrea Sprega    schedule 14.05.2012    source источник


Ответы (4)


Звучит так, как будто вам нужна либо сторонняя библиотека, либо вы сами ее пишете.

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

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

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

Извините, я не могу дать вам прямой ответ, но, надеюсь, эти вопросы помогут вам найти ответ.

person CStreel    schedule 15.05.2012

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

person dan    schedule 15.05.2012

Скорее всего, ОП справился с этим, но в духе StackOverflow по этому нишевому вопросу ......

Если вы знаете IP-адрес принтера (это можно узнать с помощью тестовой печати с помощью одной из кнопок на вашем принтере), вы можете отправлять FGL-команды через TCP-сокет на порт 9100. Я использовал FastSocket для этого на термопринтере BOCA, подключенном через 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 выполняет приведенные выше команды синхронно, убедитесь, что вы запускаете приведенный выше код в фоновом потоке, чтобы предотвратить зависание вашего пользовательского интерфейса.

person Simon Rice    schedule 10.01.2015

Чтобы отправить данные на принтер. Используется для подключения внешних периферийных устройств. Вероятно, это то, что вы ищете.

person zahreelay    schedule 14.05.2012
comment
Платформа External Accessory обеспечивает поддержку связи с внешним оборудованием, подключенным к устройству на базе iOS через 30-контактный разъем док-станции или по беспроводной сети с использованием Bluetooth. Извините, я забыл указать, что мне нужно использовать Wi-Fi. - person Andrea Sprega; 15.05.2012