Печать с использованием IPP без драйверов (клиент IPP)

У меня есть устройство/устройство, для которого вы не можете установить драйверы. Я хотел бы добавить возможность поддержки сетевых/IPP/AirPrint принтеров, заставив пользователя добавить IP-адреса.

Поскольку я не печатаю через окна (чтобы использовать IPP), как мне самому использовать IPP? Есть ли клиент С# (или любая библиотека Windows), который позволяет вам взаимодействовать с принтерами IPP с протоколом IPP?


person Paul Knopf    schedule 07.10.2013    source источник
comment
Я изучаю то же самое. Я разобрался с основами печати UPnP, но пока без особого успеха изучаю IPP/AirPrint. Пожалуйста, обновите свой пост, если вы добьетесь какого-либо прогресса.   -  person earthling    schedule 21.10.2013
comment
Сделаю. В сети буквально НИЧЕГО нет. Apple очень закрыта в отношении фактического сетевого контракта между принтером и устройством. Я ничего не могу найти на IPP. Я где-то читал, что AirPrint является расширением IPP, поэтому, если мы сможем разобраться с IPP, то мы должны быть золотыми.   -  person Paul Knopf    schedule 22.10.2013
comment
Дайте мне знать, если вы найдете что-нибудь также.   -  person Paul Knopf    schedule 22.10.2013
comment
Вы когда-нибудь находили что-нибудь по этому поводу?   -  person user319862    schedule 04.01.2014


Ответы (2)


Существует несколько клиентских реализаций IPP и библиотек IPP, доступных для разных языков программирования (java/php/python). Практическим решением может быть использование ipptool, доступного по адресу http://cups.org/software.php. . Создайте ipp-command-file с именем printjob.ipp:

{
 OPERATION Print-Job
 GROUP operation-attributes-tag
  ATTR charset attributes-charset utf-8
  ATTR language attributes-natural-language en
  ATTR uri printer-uri $uri
 FILE $filename
}

Теперь вы сможете распечатать файл PDF, используя следующие параметры:

ipptool -tv -f mydoc.pdf ipp://192.168.2.207 printjob.ipp

Убедитесь, что принтер (или сервер печати) поддерживает отправляемый формат документа. Я предполагаю, что вы знакомы с тем, как выполнить внешнюю команду в своем приложении.

Несмотря на то, что ipptool предоставляется CUPS, он отлично работает с любым IPP-принтером. Проверьте RFC 3510 или документацию по вашему принтеру для получения соответствующего идентификатора принтера. схему или использовать ippfind.

Опытные разработчики должны быть в состоянии реализовать операцию печати на предпочитаемом ими языке программирования и в экосистеме. Я реализовал описанный выше вариант использования в kotlin со 100 строками кода: https://github.com/gmuth/ipp-printjob-kotlin.

Это моя минимальная реализация PrintJob на Java: https://github.com/gmuth/ipp-printjob-java

person IPP Nerd    schedule 28.01.2015
comment
Принтеру не обязательно поддерживать отправляемый формат документа.! Это CUPS, который должен поддерживать формат документа. (Ваша командная строка предполагает, что вы печатаете через сервер CUPS, а не напрямую на IPP-принтер — иначе зачем вам использовать ipp://localhost/printers/laser в качестве URI?). CUPS автоматически напечатает файл, который вы отправили, и автоматически создаст соответствующую цепочку фильтрации формата файла, чтобы сгенерировать тип файла задания, который требуется принтеру. Вы можете отправить PDF с помощью ipptool, а целевой принтер может быть устройством PCL. CUPS позаботится о необходимых переводах.... - person Kurt Pfeifle; 30.10.2015
comment
Первоначальный вопрос Пола не имеет отношения к CUPS. Это правда, что некоторые (лучшие) принтеры или серверы печати используют application/octet-stream в качестве формата документа по умолчанию и поэтому должны автоматически вводить полученные данные. Печать без драйверов лучше всего работает с PDF и принтерами, поддерживающими PDF (например, LaserJet M175nw или imagePRESS C7010VP). Использование CUPS не может считаться печатью без драйвера, так как самому CUPS всегда нужен драйвер или фильтр. Люди, задающие вопросы об IPP или печати без драйверов, как правило, избегают промежуточного программного обеспечения, такого как CUPS. - person IPP Nerd; 23.11.2015
comment
Первоначальный вопрос Пола не имеет отношения к CUPS. Верно. -- Однако ваш ответ предполагает, что задание проходит через CUPS. Используемая вами схема URI IPP не соответствует ЛЮБОМ URI устройства печати IPP, который я знаю (а я знаю более сотни). Но это соответствует тому, что использует CUPS. - person Kurt Pfeifle; 24.11.2015
comment
Если вы хотите использовать IPP URI для прямого обращения к устройству печати, используйте либо ipp://printername-or-ip/, либо ipp://printername-or-ip/ipp или ipp://printername-or-ip/printer/ или ipp://printername-or-ip/ipp/port1 или ipp ://имя-или-ip-принтера/ipp/print. Они охватывают около 95% всех реальных IPP-устройств. К сожалению, это не совсем стандартизировано. (Ни одно из устройств, которые я когда-либо тестировал, не поддерживало ipp://printername-or-ip/printers/queuename ). - person Kurt Pfeifle; 24.11.2015
comment
Кстати, приведенный выше пример, скорее всего, не будет работать, если IPP-принтер, на который вы пытаетесь отправить файл, находится в очереди CUPS: потому что тогда вам также потребуется дополнительная строка 'ATTR name requesting-user-name $user'. Кроме того, большинство аппаратных IPP-принтеров также хотят знать, какой пользователь печатает... - person Kurt Pfeifle; 09.12.2018
comment
Я говорил о CUPS (если IPP-принтер, на который вы пытаетесь отправить файл, находится в очереди CUPS), и я не говорил, что каждый аппаратный IPP-принтер требует этого, но Я говорил о большинстве из них... - person Kurt Pfeifle; 26.12.2018
comment
Вы предполагаете, что CUPS реализует IPP во всех деталях 1:1. Это предположение неверно. Кроме того, если в спецификации указано СЛЕДУЕТ, не думайте, что CUPS НЕ делает этого. -- Я не понимаю, какую часть моих утверждений вы считаете ложной... - person Kurt Pfeifle; 26.12.2018

Образец программного обеспечения IPP

Тем временем пример программного обеспечения IPP (который включает ipptool упоминалось выше) — это отдельный проект на Github. Сейчас он находится под эгидой Рабочей группы принтеров (PWG), которая стандартизировала IPP (интернет-печать). протокол).

Хотя программное обеспечение в настоящее время все еще находится в стадии бета-тестирования, оно уже очень функционально. Он поставляет два основных инструмента командной строки:

  1. ippserver. Запустите его (с соответствующими параметрами), и у вас будет полноценный экземпляр сервера IPP в вашей сети, служащий виртуальным принтером IPP (или сервером IPP, на котором размещаются несколько виртуальных очередей IPP), который вы можете использовать для тестирования любых (или ваших собственных) -написано) IPP клиентское ПО против.

  2. ipptool. Это клиентская программа IPP, которая может отправлять любую комбинацию запросов IPP любому экземпляру IPP в сети (серверу CUPS, ippserver, аппаратному обеспечению принтера с поддержкой IPP) и проверять свои ответы. Программное обеспечение поставляется с несколькими подготовленными текстовыми файлами, содержащими примеры запросов IPP, все с суффиксом .test в именах файлов.

Для вашей цели вы можете запустить эти команды:

  1. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print get-printer-attributes.test. Эта команда запросит любой IPP-принтер о поддерживаемых им атрибутах IPP. Это должно включать элемент, сообщающий о поддержке его предполагаемых версий IPP. Например, отчет как ipp-versions-supported (1setOf keyword) = 1.0,1.1,2.0.

  2. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-1.1.test. Эта команда запустит полный пакет проверки принтера, чтобы проверить его соответствие реальному миру IPP-1.1.

  3. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.0.test. Эта команда запустит полный пакет проверки принтера, чтобы проверить его соответствие реальному миру IPP-2.0.

  4. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.0.test. Эта команда запустит полный пакет проверки принтера, чтобы проверить его соответствие реальному миру IPP-2.0.

  5. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.1.test. Эта команда запустит полный пакет проверки принтера, чтобы проверить его соответствие реальному миру IPP-2.2.

  6. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.2.test. Эта команда запустит полный пакет проверки принтера, чтобы проверить его соответствие реальному миру IPP-2.2.

  7. ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-everywhere.test. Эта команда запустит полный пакет проверки IPP Everywhere (который является последним стандартом IPP) для принтера, чтобы проверить его соответствие реальному миру IPP Everywhere.


AppImage образца программного обеспечения IPP

Чтобы упростить этот тип тестирования для вас, ребята, я создал готовый исполняемый файл AppImage из примера программного обеспечения IPP, который должен иметь возможность запускаться напрямую (без «установки»!) на всех дистрибутивах Linux x86_64.

Вы можете использовать его (почти) в любой системе Linux без установки CUPS или ippsample!

В AppImage встроены все основные исполняемые инструменты командной строки проекта IPP Sample Software. Эти исполняемые файлы будут выполняться как 'подкоманды' в AppImage. Примеры смотрите ниже.

  1. Скачать:

    wget https://github.com/KurtPfeifle/ippsample/releases/download/continuous/ippsample-x86_64.AppImage
    
  2. Сделайте AppImage исполняемым (и при необходимости переименуйте его в ippsample):

    chmod a+x ippsample-x86_64.AppImage
    mv ippsample-x86_64.AppImage ippsample
    
  3. Посмотрите на встроенный экран справки:

    ./ippsample --ai-usage
    
  4. Запустить:

    ./ippsample ipptool -t -v ipp://xxx.xxx.xxx.xxx/ipp/print ipp-2.0.test
    
  5. Найти поблизости все принтеры с поддержкой IPP:

    ./ippsample ippfind
    

    даст что-н. подобно:

    ipp://HPA0B3CCF051B9.local:631/ipp/printer
    ipp://lenjessie2.local:8444/ipp/print
    ipp://mbp14.papercut-ipv4.local:631/printers/OJ6500
    ipp://mbp14.papercut-ipv4.local:631/printers/libreoffice-pin-code-drucker
    
  6. Выберите один принтер, распечатайте задание:

    ./ippsample ipptool       \
            -tv               \
            -f ./printjob.pdf \
             ipp://HPA0B3CCF051B9.local:631/ipp/printer \
             print-job.test
    

ASCIinema ASCIIcast

Вот (старый) ASCIinema ascii-cast, служащий иллюстрацией того, о чем я писал и как использовать Образец программного обеспечения IPP (и его AppImage):

asciicast< /а>

person Kurt Pfeifle    schedule 08.12.2018
comment
@IPPGeek: Теперь это так, теперь даже гики могут это воспроизвести. - person Kurt Pfeifle; 10.12.2018