Распечатать HTML-файл с CUPS - PullRequest
3 голосов
/ 30 ноября 2011

Есть ли способ явно указать серверу CUPS, что отправляемый вами файл text/html, переопределяя поиск mime.types?

1 Ответ

7 голосов
/ 11 февраля 2012

Да, есть.

Используйте эту командную строку:

lp -d printername -o document-format=text/html file.html

Обновление (в ответ на комментарии)

Я дал точный ответ на вопрос ОП.

Однако это (одно) не гарантирует, что файл будет успешно распечатан. Для этого CUPS необходим фильтр , который может обрабатывать ввод MIME-типа text/html.

Такой фильтр не предоставляется самой CUPS. Тем не менее, легко подключить свой собственный фильтр к системе фильтрации CUPS, и некоторые дистрибутивы Linux поставляют такой фильтр, способный принимать файлы HTML и преобразовывать их в формат для печати. ​​

Вы можете проверить, что происходит в такой ситуации на вашей системе. Команда cupsfilter является вспомогательной утилитой для запуска доступных / установленных фильтров CUPS без необходимости выполнять фактическую печать через демон CUPS:

touch 1.html
/usr/sbin/cupsfilter --list-filters 1.html

Теперь в системе, где нет готового HTML-фильтра, вы получите такой ответ:

cupsfilter: No filter to convert from text/html to application/pdf.

В другой системе (например, на Mac) вы увидите следующее:

xhtmltopdf

Вы даже можете принудительно вводить и выводить типы MIME, чтобы видеть, какие фильтры CUPS будут запускаться автоматически при запросе на печать этого файла на принтере, поддерживающем этот конкретный тип вывода MIME (-i устанавливает тип ввода MIME , -m выход):

/usr/sbin/cupsfilter                  \
            -i text/html              \
            -m application/postscript \
            --list-filters            \
              1.html
  xhtmltopdf
  cgpdftops

Здесь сначала нужно преобразовать HTML в PDF, используя xhtmltopdf, а затем преобразовать полученный PDF в PostScript, используя cgpdftops.

Если вы пропустите параметр --list-filters, команда на самом деле даже выполнит преобразование путем активного запуска (не просто перечисления) двух фильтров и выдаст результат в <stdout>.

Вы можете написать свой собственный фильтр CUPS на основе сценария Shell. Единственный другой ингредиент, который вам нужен, - это инструмент командной строки, такой как htmldoc или wkhtmltopdf,, который способен обрабатывать ввод HTML и создавать какой-то формат, который, в свою очередь, может использоваться цепочкой фильтрации CUPS в дальнейшем.

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

Если вам нужны подробности об этом, просто задайте другой вопрос ...

...