Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Вперед Назад Содержание

10. Вывод на печать и PostScript

Напечатать что-либо -- это всегда проблема. Имеется набор различных принтеров от различных производителей с различными особенностями. Даже для вывода на печать обычного ASCII текста нет никаких общих решений (это применимо не только к UNIX, но также и к другим операционным системам).

Принтеры имеют различные управляющие языки, и очень часто они имеют сильно различные подходы к поддержке иностранных языков. Хорошая новость -- это то, что сейчас в качестве управляющего языка, как стандарт de facto для описания работы печати, используется язык PostScript, разработанный Adobe Corporation. Много принтеров имеют встроенный PostScript интерпретатор, то есть вам надо просто послать на принтер Postscript данные. Для тех, у кого этого нет, существует программные PostScript интерпретаторы, которые берут данные PostScript и преобразовывают в специфический для данного принтера управляющий код. Один из них мы сейчас обсудим (вероятно, лучший из лучших). Это GNU GhostScript (gs для краткости).

Другая проблема -- это широкий спектр требований, предъявляемых к печати. Например, иногда вы хотите просто напечатать часть вашей программы на "C", содержащей в качестве комментария текст на русском, так что вы не нуждаетесь в "навороченной"  процедуре печати -- вам нужен простой ASCII вывод с одним шрифтом. Совсем другое дело, когда вы создаёте открытку для вашей подруги. В этом случае вы, вероятно, будете нуждаться в печати документа с различными шрифтами и т.д. И это уже определённо требует больших усилий по установке поддержки кириллицы.

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

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

10.1 Преобразование текста в PostScript

Иногда у вас есть простой ASCII KOI-8 текст, и вы хотите его только напечатать. Один из самых простых способов это сделать -- это воспользоваться услугами программ, преобразующих текст в PostScript.

Есть ряд программ, делающих такое преобразование. Я лично предпочитаю a2ps. Первоначально разработанная как простой преобразователь text-to-PostScript, сейчас эта программа стала "матёрым", легко настраиваемым программным продуктом с большим количеством опций и настроек. Она позволяет управлять форматами, размещением страниц, выделением и т.д. Другая утилита, делающая примерно то же самое (теперь доступная как часть проекта GNU) -- enscript.

A2ps конвертер

Преобразователь текста в PostScript был и остаётся одним из наиболее универсальных средств печати. Все, в чем вы теперь нуждаетесь -- это PostScript принтер.

Команда, которую я использую для этого:

a2ps -X koi8r --print-anyway  <файл>

Комплект шрифтов i18n-fonts нужных для преобразования кириллических текстов в Postscript не входит в дистрибутив a2ps начиная с версии 4.12 ПО ПРИЧИНЕ НЕ ХАЛЯВНОЙ ЛИЦЕНЗИИ. Шрифты следует скачать с домашней странички a2ps или с ftp a2ps.

Для работы a2ps можно использовать шрифты sharatype-2.0.tar.gz, где в комплекте идёт все необходимое для прикрутки оных шрифтов к a2ps. Будет работать и в Latin-1 и в KOI-8. Должно также и в Latin-2.

GNU enscript

Программа GNU enscript, как и a2ps, была разработана для преобразования текста в PostScript, и она также поддерживает не-ascii кодировки. Программа не имеет русских PostScript шрифтов в своём составе, но их очень просто доустановить. Как это сделать, описано ниже (спасибо Michael Van Canneyt):

  1. Установите последний enscript. Самую последнюю версию 1.5. вы можете найти в GNU FTP архиве.
  2. Если вы -- пользователь RedHat Linux, загрузите и установите шрифт Cyrillic Textbook.
  3. Если вы не используете RPMки, вытяните файл textbook.tar.gz из архива на sunsite.unc.edu (здесь лежит программное обеспечение для русификации). Разархивируйте этот файл в каталог, где размещены шрифты для enscript (обычно /usr/share/enscript). Теперь перейдите туда и выполните следующую команду:
        mkafmmap *.afm
    
  4. Установка завершена. Попробуйте напечатать текст в KOI8-R следующей командой:
        enscript --font=Textbook8 --encoding=koi8 some.file
    

rtxt2ps

Если же вам требуется действительно быстрый и простой способ, а качество вывода для вас некритично, и все, что вам нужно -- это только русский текст на бумаге, попробуйте пакет rtxt2ps. Это очень простой, без украшательств, конвертер текста в PostScript. Качество вывода не очень хорошее (честно говоря, плохое), но это работает.

10.2 Преобразование текста в TeX

Если все, в чем вы нуждаетесь -- это печать ASCII текста без дополнительной обработки, то вы можете использовать некоторые программки, которые могут преобразовать ваш текст кириллицы в готовый TeX файл. Одна из самых лучших программ для таких целей -- это translit (Смотрите раздел Символьная перекодировка). В этом случае вы даже не должны беспокоиться относительно установки шрифтов кириллицы для TeX, так как translit использует пакет кириллицы Washington Cyrillic, который включён в большинство дистрибутивов TeX (подробнее об этом пакете смотрите в разделе Работа с Washington Cyrillic).

10.3 Кириллица в PostScript

Эксперты говорят, что PostScript -- это просто. Я не могу судить -- у меня было слишком много вещей, которые надо изучить, чтобы выкроить время для изучения PostScript. Но я все равно попробую использовать мои небольшие знания об этом вопросе. Я буду очень благодарен за любую информацию об этом вопросе от вас, друзья, которые знают больше меня (вас приблизительно 99% от Земной популяции).

Чтобы печатать русский текст с использованием PostScript, вы должны удостовериться относительно следующих вещей:

  • шрифт кириллицы загружен в принтер, и тогда у вас все уже должно работать.
  • текст кириллицы включён в документ -- здесь можно воспользоваться следующим способом: Для того чтобы вшить русские шрифты в сам ps-файл, нужно после printtool в соответствующем файле /var/spool/lpd/lp.../postscript.cfg заменить строку 'GSDEVICE=POSTSCRIPT' на 'GSDEVICE=pswrite'. Кроме описанного метода, можно включить шрифты в файл PostScript руками с помощью обычного текстового редактора -- подробно это описано в разделе Инкапсуляция шрифтов Type1 в Encapsulated PostScript (eps).
  • текст кириллицы использует символьные коды, которые соответствуют требованиям шрифта.
  • чтобы печатать текст кириллицы, выбран соответствующий шрифт.

Не имеется никакого достаточно общего решения, чтобы рекомендовать его как окончательное. Я попробую осветить различные способы для решения различных проблем, связанных с этим вопросом.

Один способ -- это побороть проблемы установки кириллицы вообще, и состоит он в том, чтобы использовать Ghostscript. Ghostscript (или просто gs от newspeak) абсолютно free (ну, не совсем) интерпретатор PostScript. У него есть много преимуществ; среди них:

  • Способность работать на многих платформах (различные Unix, MS Windows и т.д);
  • Поддержка для огромного количества не-PostScript принтеров;
  • Высокая степень настраиваемости.

В нашем специфическом случае является важным то, что однажды установив и настроив Ghostscript, мы можем все печатать через него, таким образом нам не надо дополнительно настраивать другие PostScript устройства (например, HP LaserJet IV).

10.4 Инкапсуляция шрифтов Type1 в Encapsulated PostScript (eps)

Рисунки в формате PostScript часто требуется включать в текст, подготовленный таким средством форматирования, как TeX. Компания Adobe разработала формат файла Инкапсулированный PostScript (EPS или EPSF), который создаётся в соответствии с соглашениями по структурированию документов в формате PostScript (PostScript Document Structuring Conventions).

Большинство современных графических приложений порождает файл в общепринятом формате EPS, который без труда может быть использован LaTeXом. Существует одно но: как правило, при создании EPS файла шрифты, которыми делаются надписи (шрифты, конечно же, -- PostScript Type1), в него не включаются и при печати заменяются первыми попавшимися.

Если у вас есть картинка в EPS, использующая шрифт AAA, и файл AAA.PFA с этим PostScript шрифтом, то для того, чтобы инкапсулировать шрифт в картинку, надо с помощью любого текстового редактора вставить файл AAA.PFA целиком непосредственно перед строчкой %%EndProlog в файл EPS.

Если у вас есть только PFB шрифты, то их следует его преобразовать в PFA. Для этого воспользуйтесь утилитой pfb2pfa (см. CTAN) или t1ascii (см. t1utils).

Для вставки вместо редактора можно использовать скрипт includeresources из psutils -- он делает то же, но автоматически.

Этот же приём срабатывает и для обычного PostScript файла.

10.5 Ghostscript

Пакет Ghostscript является совершенно уникальным продуктом -- фактически все, что печатается в Unix, проходит через Ghostscript.

Настройка ghostscript

Иногда необходимо иметь какую-нибудь специфическую, не общесистемную настройку ghostscript. Например, возможно, что у вас нет привилегий root-а, или вы не желаете воспользоваться ими из соображений безопасности. В системе могут совместно работать пользователи, нуждающиеся в разных настройках. Кроме того, универсальной настройки просто не существует. Например, для того, чтобы Netscape печатал кириллицу, нужно заместить стандартные латинские PostScript шрифты кириллическими. Но с другой стороны, после этой замены будет невозможно напечатать (и даже увидеть на экране) некоторые латинские тексты.

Создайте новый каталог (например, ~/.ghostscript) и поместите в него все новые кириллические шрифты. Скопируйте в него также файл Fontmap и затем измените его как Вам угодно. Установите переменную окружения GS_LIB:

export GS_LIB=~/.ghostscript

Эта переменная указывает ghostscript, что нужно сначала заглянуть в каталог ~/.ghostscript (где находятся ваши новые шрифты и файл Fontmap), и лишь потом в общесистемные каталоги.

Добавление шрифтов кириллицы к Ghostscript

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

Чтобы добавлять новый шрифт (в формате pfa или pfb) в gs, вы должны:

  1. Поместить этот шрифт в каталог шрифтов tt/gs/. Обычно это /usr/lib/ghostscript/fonts -- можно уточнить с помощью команды 'gs -h'.
  2. Добавить соответствующие имена и aliases для шрифта в файле Fontmap в каталоге gs.

О том, где можно найти шрифты Type1, написано в разделе Шрифты Type1.

10.6 Использование старого матричного принтера для печати кириллического текста

Если у вас есть старый добрый матричный принтер, и вы нуждаетесь в простом выводе текста на KOI8, то попробуйте следующее:

  1. Найти соответствующий KOI8 шрифт для вашего принтера. Проверьте ftp архивы MS DOS в Internete (например, посмотрите на архив SimTel).
  2. Прочитайте руководство и найдите в нем описание загрузки такого шрифта в ваш принтер. Напишите простенькую программу, делающую это.
  3. Запускайте эту программку из соответствующего rc файла при загрузке.

Таким образом, наличие символов Cyrillic в верхней части набора символов принтера позволит вам печатать тексты по-русски без дополнительных ухищрений.

Альтернативно к KOI8-R шрифтам вы можете попробовать использовать CP866 шрифты. Для этого имеются две причины:

  • Вероятно, найти CP866 шрифты намного проще, так как те были очень широко распространены во времена MS-ДОС.
  • Наличие соответствующего CP866 шрифта позволит вам печатать также и псевдографические символы.

Следует отметить, что в Болгарии вместо CP866 используется кодировка МИК.

Однако, в этом случае вы должны будете преобразовать ваши тексты из KOI8-R в CP866 перед посылкой их на принтер. Это не проблема, так как имеется множество программ, делающих это (для примера смотрите раздел Символьная перекодировка), так что для этого вам нужно только вызвать такую программку из файла /etc/printcap в "if поле". Например, с программой translit можно сделать следующее:


if=/usr/bin/translit -t koi8-alt.rus

Для подробностей смотрите printcap(5).

10.7 Формат A4

Это имеет весьма отдалённое отношение к кириллизации, но иногда очень полезно знать, что надо сделать, чтобы ваш текст был отформатирован под страницу формата A4 (заимствовано из Serbian-HOWTO).

  • dvips -- измените нужным образом файл /usr/share/texmf/dvips/config/config.ps или ~/.dvips.
  • ghostscript -- при вызове программы из командной строке, добавьте параметр -sPAPERSIZE=a4.
  • ghostview -- добавьте следующую строку в файл ~/.Xresources:
    Ghostview.pageMedia:  A4
    
  • xdvi -- добавьте следующую строку в файл ~/.Xresources:
    XDvi.paper:     A4
    


Вперед Назад Содержание