поддержка кодировки utf-8 с помощью lpr


11

При попытке отправить текстовый файл на принтер через lprс xterm, содержание было испорчено до неузнаваемости, причиной которого была в конечном счете восходит к кодированию файла. Если я вместо этого обработаю текст с помощью iconv(например, iconv -f utf-8 -t ascii//TRANSLIT), то файл печатается нормально. Еще одно предложение, с которым я столкнулся, - это настройка формата документа (например, lpr -o document-format=text/utf8), но это возвращает ошибку lpr: Unsupported document-format "text/utf8". Я всегда мог использовать псевдоним lprкоманды для включения обработки iconv, но есть ли более общий способ поддержки нативного utf-8 в CUPS/ lprsystem?

Изменить: Моя ОС Debian 8 и мой оконный менеджер openbox(без среды рабочего стола). Я могу напечатать этот файл без проблем из MacOS X, а также из системы Debian7 / Gnome3.

В моей нынешней системе я должен указать, что даже после изменения кодировки символов с UTF-8 на ASCII символы новой строки не соблюдаются lpr, поэтому строки соединяются вместе и печатаются до тех пор, пока не будет достигнут край бумаги. После перекодирования и транслитерации iconvв MacOS X печать по-прежнему работает нормально (поэтому проблема с новой строкой также характерна для моей текущей системы).


1
У меня нет глубоких знаний CUPS, но он определенно должен включать в себя правила, как определять тип документа (с типом MIME на выходе) и как переводить любой для целевого принтера, это включает растеризацию, формирование файла Postscript или PCL и т. Д. Не могли бы вы указать ваш тип принтера? Ты пробовал a2ps? Какая кодировка действительно используется на выходе, когда вы пытаетесь использовать utf-8? (Я думаю, что это iso-8859-1)
Netch

@ Netch: Спасибо за указание на a2psфильтр. Я не знал об этом. Данный принтер является сканирующим лазерным принтером HP4650. Как определить используемую кодировку CUPS? Фактически напечатанные символы, которые не имеют заметного отношения к вводу, включали в себя греческую заглавную гамму, заглавную букву C с символом cedilla, букву o с окантовкой и латинскую заглавную букву W и T. Помимо этого, происходит несоблюдение символов перевода строки. в усечении вывода на поле бумаги.
user001

Кажется, что применяемая кодировка iso-8859-1. Вы можете легко проверить это, используя его таблицу. Некоторые поиски предлагают вызывать как, lpr -o document-format='text/plain;charset=utf-8'будет достаточно для печати, как вы хотите, но это не меняет вашу установку CUPS по умолчанию, которая кажется устаревшей.
Нетч

Ответы:


1

То же самое можно сделать с папами;

#!/bin/bash
#This script converts UTF-8 txt to postscript
paps | lpr
Sometimes you need to specify the prinqueue;

#!/bin/bash
# This script converts UTF-8 txt to postscript
paps | lpr -P lj

Папс делает намного лучше, чем текстовые чашки.


Большое спасибо за ваш ответ. Я знаю papsи хотел знать, была ли возможность встроенной поддержки внутри, CUPSчтобы не вызывать внешние зависимости.
user001

1

Я не знаю, считаете ли вы HPLIP внешней зависимостью, но вот официальная рекомендация драйвера непосредственно от CUPS.

Драйвер принтера CUPS: HP4650

а вот информация о пакете в репо Debian: HPLIPS

Как утверждает Туши, ваша система не знает, как растеризовать документ без использования такого инструмента, как paps. Установка пакета hplip и его настройка на http://localhost:631использование рекомендованного драйвера решит вашу проблему. Для получения дополнительной информации см. Запись SystemPrinting в DebianWiki.


Благодарю. У меня уже есть последняя версия HPLIP в моей системе. Я пытался найти, где можно указать это, http://localhost:631но я не мог найти ничего о выборе драйвера.
user001

Прочитайте Раздел 4
eyoung100


0

Вы должны иметь что-то вроде:

text/plain              application/postscript  33      texttops

в вашем /etc/cups/mime.convsфайле. Итак, я полагаю, что нужно исправить фильтр texttops. В Debian это - /usr/lib/cups/filter/texttopsсценарий оболочки, использующий фильтр texttopdf и pdf2psкоманду. Вы можете попробовать заменить вызов texttopdf / pdf2ps paps, но обратите внимание, что аргументы не совпадают. Минимальной (поскольку текст передается на стандартный ввод, а результат ps отправляется на стандартный вывод) будет строка, содержащая:

paps

но вы можете добавить опции, например:

paps --font='Monospace 10'

Примечание: я не пробовал. Просто предположение ...

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.