Евгений Демидов. Русификация печати на PS-принтере и в Unix Netscape Оригинал этого документа расположен на ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/ ║ ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/ --------------------------------------------------------------- File README in this directory contains description of uploaded koi8 ps-fonts and installation instrictions (in koi8 encoding) it was last modified on Fri Aug 8 12:01:37 1997 --------------------------------------------------------------- FTP Directory: ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/ Parent Directory .message . . . . . . . . . . . . [Apr 15 14:18] 1k README . . . . . . . . . . . . . [Aug 8 08:01] 9k XFree86-Type1_fonts.dir.scale.g> [Aug 7 07:14] 1k XFree86-xfonts.unscaled.tgz. . . [Aug 7 10:32] 2k gs-Fontmap.add.gz. . . . . . . . [Apr 15 14:08] 1k ║ gs-Fontmap.add gs-type1_koi8_afm.tgz. . . . . . [Aug 7 07:18] 29k gs-type1_koi8_fonts.tgz. . . . . [Apr 15 14:08] 627k ║ gs-type1_koi8_fonts.tgz so-psstd.fonts.add.gz. . . . . . [Aug 7 07:22] 1k README file from ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/ На ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/ выложены Type1 ps-фонты в koi8 и koi8-r кодировках, предназначенные для печати в gs-эмуляторе postscript-принтера. С их помощью мне удалось добиться вывода на печать кириллицы из Netscape Navigator и русифицировать StarOffice. Файл gs-type1_koi8_fonts.tgz содержит: - ERKurier KOI8-R фонты, конвертированные из ttf-формата ((c) Gavin Helf, 1995. Changes (c) 1996 by Andrey A. Chernov). - 3 семейства фонтов ArialCyrMT, CourierCyrPS и TimesNRCyrMT ((c) Monotype Corporation 1990-1992), полученные конвертированием соответствующих ttf- фонтов. Псевдографика отсутствует. ERKurier и CurierCyr являются monospaced фонтами. ERKurier включает в себя псевдографику в соответствии с RFC 1489. ArialCyr (который imho допустимо использовать в качестве замены Helvetica) и TimesNRCyr - proportional фонты. 1.Русификация Ghostscript Чтобы установить данные шрифты в ghostscript - следует, забрав файлы ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/gs-type1_koi8_fonts.tgz ║ ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/gs-type1_koi8_fonts.tgz ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/gs-Fontmap.add.gz ║ ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/gs-Fontmap.add.gz проделать следующее (с привилегиями root): $: cd /fonts/ $: tar xzf {путь_к_файлу}/gs-type1_koi8_fonts.tgz $: cd ../<номер_версии_gs>/ $: cp Fontmap Fontmap.orig $: zcat {путь_к_файлу}/gs-Fontmap.add.gz >> Fontmap ( определяется во время генерации ghostscript, по умолчанию это /usr/local/share/ghostscript). Фонты были сгенерены в pfb-формате, метрика - в pfm-формате. Если для работы каких-либо приложений Вам необходимо иметь метрику в afm-формате, Вам следует забрать файл ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/gs-type1_koi8_afm.tgz ║ ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/gs-type1_koi8_afm.tgz и также разархивировать его в /fonts/. Фонты в формате pfa, если это необходимо, можно получить из соответствующих pfb-файлов с помощью утилиты pfb2pfa либо pfbtops. Для того, чтобы иметь возможность работать в gs с фонтами Courier, Times и Helvetica в koi8 кодировке, необходимо в Fontmap поменять алиасы на них: закомментировать стоящие по умолчанию и раскомментировать добавленные из gs-Fontmap.add. Какой из двух monospaced фонтов будет у Вас называться Courier - решайте сами. А вот кириллические добавки к Fontmap --------------------------------------------------------------- % Cyrrillic koi8 fonts/aliases /ArialCyrMT (arial8.pfb) ; /Arial /ArialCyrMT ; % /Helvetica /ArialCyrMT ; /ArialCyrMT-Bold (arialbd8.pfb) ; /Arial-Bold /ArialCyrMT-Bold ; % /Helvetica-Bold /ArialCyrMT-Bold ; /ArialCyrMT-Italic (ariali8.pfb) ; /Arial-Italic /ArialCyrMT-Italic ; % /Helvetica-Oblique /ArialCyrMT-Italic ; /ArialCyrMT-BoldItalic (arialbi8.pfb) ; /Arial-BoldItalic /ArialCyrMT-BoldItalic ; % /Helvetica-BoldOblique /ArialCyrMT-BoldItalic ; /CourierCyrPS (cour8.pfb) ; % /Courier /CourierCyrPS ; /CourierCyrPS-Bold (courbd8.pfb) ; % /Courier-Bold /CourierCyrPS-Bold ; /CourierCyrPS-Inclined (couri8.pfb) ; % /Courier-Oblique /CourierCyrPS-Inclined ; /CourierCyrPS-BoldInclined (courbi8.pfb) ; % /Courier-BoldOblique /CourierCyrPS-BoldInclined ; /TimesNRCyrMT (times8.pfb) ; % /Times-Roman /TimesNRCyrMT ; /TimesNRCyrMT-Bold (timesbd8.pfb) ; % /Times-Bold /TimesNRCyrMT-Bold ; /TimesNRCyrMT-Inclined (timesi8.pfb) ; % /Times-Italic /TimesNRCyrMT-Inclined ; /TimesNRCyrMT-BoldInclined (timesbi8.pfb) ; % /Times-BoldItalic /TimesNRCyrMT-BoldInclined ; /ERKurierKOI8RRegular (cokoi8n.pfb) ; % /Courier /ERKurierKOI8RRegular ; /ERKurierKOI8RBold (cokoi8b.pfb) ; % /Courier-Bold /ERKurierKOI8RBold ; /ERKurierKOI8RItalic (cokoi8i.pfb) ; % /Courier-Oblique /ERKurierKOI8RItalic ; /ERKurierKOI8RBoldItalic (cokoi8bi.pfb) ; % /Courier-BoldOblique /ERKurierKOI8RBoldItalic ; --------------------------------------------------------------- Во избежание подмены ghostscript'ом установленных koi8-фонтов другими (нескалируемыми X-фонтами), gs следует запускать с ключем -dNOPLATFONTS. Фильтры для принтеров В качестве примера ниже приводятся проверенные в работе фильтры эмуляции postscript-принтера для epson lq-100 и hp laserjet и hp lj4 (фильтр должен быть прописан в printcap как опция "if" в entry для postcript-печати) ---cut here (begin print filter)--- #!/bin/sh # # Printer Postscript emulation # DEVICE=ljet4 # ljet2p # epson RESOLUTION=600x600 # 300x300 # 360x180 PAPERSIZE=a4 # -Z проверить тип файла и если не PS то сконвертировать в PS # -B Turns off page titles. Заголовок страницы пожирает 2 строки. nenscript -TA4 -ZB -p- |\ gs -q -sDEVICE=$DEVICE \ -r$RESOLUTION \ -sPAPERSIZE=$PAPERSIZE \ -dNOPLATFONTS \ -dNOPAUSE \ -dSAFER \ -sOutputFile=- - ---cut here (end ps filter)--- Для предварительного просмотра на экране распечатки с кириллицей (например, перенаправленного в файл вывода печати из X-приложения), утилиту ghostview (либо gv) необходимо запускать с ключами -arguments -dNOPLATFONTS. Или завести переменную GS_OPTIONS со значением -dNOPLATFONTS. Для выборочной печати из netscape /* Этот метод предложил Максим Мошков */ Чтоб делать выборочную печать из netscape, сделайте командный файл netscapeprint, и исправьте в конце свого файла ~/.netscape/preferences параметры: PRINT_COMMAND: netscapeprint PRINT_PAPER: 3 --------------------------------------------------------------- #!/bin/sh TMP=/tmp/net$$.ps cat $@ > $TMP # PRINTER=lp export PRINTER ( trap "rm -f $TMP" 0 1 2 3 9 10 15 ghostview -arguments -dNOPLATFONTS $TMP 2> /dev/null) & --------------------------------------------------------------- Фильтр для печати в две колонки /* Этот метод предложил Максим Мошков */ --------------------------------------------------------------- #!/bin/sh DEVICE=ljet4 RESOLUTION=600x600 PAPERSIZE=a4 COLUMNS="-2" TMP=/tmp/lp$$type trap "rm -f $TMP" 0 1 2 3 9 10 15 ( # сами определим тип печатаемого файла (сохраним его 4 байта) dd of=$TMP count=1 bs=4 2> /dev/null cat $TMP - ) | if grep '%!' $TMP > /dev/null ; # а mpage не умеет сдваивать постскрипт вышедший из nenscript then mpage -A $COLUMNS -P- # nenscript не притрагивается к постскриптовскому файлу else nenscript -TA4 $COLUMNS -ZB -p- fi | if [ "$DEVICE" = "PostScript" ]; then cat - else gs -q -sDEVICE=$DEVICE \ -r$RESOLUTION \ -sPAPERSIZE=$PAPERSIZE \ -dNOPLATFONTS \ -dNOPAUSE \ -dSAFER \ -sOutputFile=- - fi # fi | lpr -l -P otherljprintername # на нелокальный принтер пересылаем lpr -l ("as is with control characters") exit 0 --------------------------------------------------------------- 2.Установка Type1-фонтов в XFree86 Забрав с ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/ файл XFree86-Type1_fonts.dir.scale.gz, проделайте следующую процедуру (с привилегиями root): $: cd /usr/X11R6/lib/X11/fonts/Type1/ $: mv fonts.dir fonts.dir.orig $: mv fonts.scale fonts.scale.orig $: zcat <путь_к_файлу>/XFree86-Type1_fonts.dir.scale.gz > fonts.dir $: cp fonts.dir fonts.scale По сравнению с оригинальными fonts.*, здесь добавлены описания koi8 фонтов и изменена первая строка (количество доступных фонтов). Сами описанные в fonts.dir файлы *.pfb также должны находиться в этом каталоге (можно их слинковать из /fonts/). Проведя необходимые манипуляции, введите команду 'xset fp rehash' (с правами авторизованного пользователя x-консоли). После этого фонты "kurier cyr", "arial cyr", "courier cyr" и "times cyr" станут доступны в X11- приложениях, запущенных из этого же окна xterm. (Для того, чтобы изменения в fontpath стали постоянно доступны из любого приложения, следует перезапустить xdm или startx). К сожалению, не все X-приложения могут полноценно использовать скалируемые Type1-фонты. Кроме того, даже те из них (например StarOffice), которые способны производить масштабирование отображаемых шрифтов, затрачивают на это заметное время. Поэтому, возможно, Вы найдете полезным установить в XFree86 также нескалируемые фонты, которые можно сгенерить после того, как установленные pfb-фонты станут доступны в XWindow. Для этого, забрав файл ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/XFree86-xfonts.unscaled.tgz и запустив (с правами root) 'xfs&', проделайте следующее: $: tar xzvf XFree86-xfonts.unscaled.tgz $: cd xfonts.unscaled/75dpi $: ../create_fonts < fonts.dir $: cd ../100dpi $: ../create_fonts < fonts.dir Скрипт create_fonts использует утилиты fstobdf и bdftopcf, проверьте предварительно их наличие на Вашей системе. Возможно, перед тем, как сгенерить нескалируемые фонты, Вы сочтете необходимым отредактировать файлы xfonts.unscaled/*/fonts.dir, добавив или убрав какие-либо размеры или фонты. Не забудьте при этом изменить первую строку в соответствующем fonts.dir (количество фонтов), которую использует скрипт create_fonts. Полученные файлы xfonts.unscaled/*/*.pcf.Z следует перенести в каталог(и) /usr/X11R6/lib/X11/fonts/cyrillic/[*dpi/], который(ые) у Вас уже наверняка существует(ют), и добавить соответствующие строки в файл(ы) fonts.dir. В общем, действия аналогичны тем, что уже были проделаны при установке фонтов в /usr/X11R6/lib/X11/fonts/Type1/. 3.Русификация печати из Netscape Navigator Для этого достаточно русифицировать gs (п.1). Полный WYSIWYG установкой соответствующих koi8-шрифтов в X11 все равно получить не удастся. Независимо от выбранных Вами фонтов и их размеров для отображения текста в окне мозиллы, NN всегда использует для вывода на postscript-принтер только два шрифта: Courier в качестве monospaced шрифта и Times - в качестве pro╜ portional. Размер шрифтов при этом также жестко задан. Кроме того, мне так и не удалось найти возможность подсунуть NN 3.01 метрику используемых в gs фонтов. Netscape Navigator использует "зашитые" в него метрики для Times и Courier, и в результате "промахивается" при расстановке символов. Особенно это заметно при печати таблиц или текста с выделенными (как bold и/или italic) словами. 4.Русификация StarOffice Здесь не обязатьельно русифицировать gs (п.1), так как при выводе на печать нестандартные фонты инкапсулируются в postscript-текст, однако необходимо выполнить п.2. Кроме того, следует - Положить pfb-файлы из gs-type1_koi8_fonts.tgz в $XPPATH/pssoftfonts/ (можно слинковать их из /usr/X11R6/lib/X11/fonts/Type1/) - Положить afm-файлы из gs-type1_koi8_afm.tgz в $XPPATH/fontmetrics/afm/ - Добавить в файл $XPPATH/psstd.fonts описания фонтов (файл ftp://ftp.kapella.gpi.ru/pub/cyrillic/psfonts/so-psstd.fonts.add.gz) командой 'zcat so-psstd.fonts.add.gz >> $XPPATH/psstd.fonts' (Переменная XPPATH у Вас, вероятно, есть /usr/local/StarOffice-3.1/xp3). После этого, при выборе в StarOffice-приложении в качестве принтера по умолчанию какого-либо postscript-принтера, Вам станут доступными шрифты "kurier cyr", "arial cyr", "courier cyr" и "times cyr". 5.Примечания ВНИМАНИЕ тем, кто забирал файлы XFree86-Type1_fonts.dir.scale.gz и gs-type1_koi8_afm.tgz до 08.08.97. -------- Эти файлы были изменены, и Вам придется скачать их еще раз. Причина изменения XFree86-Type1_fonts.dir.scale.gz - необходимость модифицировать имена X-фонтов, чтобы в StarOffice можно было различать кириллические и некириллические фонты (например, "times cyr" и "times"). В gs-type1_koi8_afm.tgz все файлы *.afm были слегка подредактированы, так как в их первозданном виде swriter3 не хотел их признавать. ============ Описанные процедуры были проверены на системах: FreeBSD 2.1.5-R, 2.2.1-R, 2.2.2-R XFree86 3.1.2, 3.2, 3.3 Ghostscript 4.03 Netscape 3.01 Gold StarOffice 3.1 for Linux, с эмуляцией Linux под FreeBSD 2.2.2-R Замеченные недостатки: - Символы 0x80-0x9f в X-приложениях не отображаются, а расположение символов в диапазоне 0xa1-0xdf не полностью соответствует заданному в фонтах. Символ 0xa0 в некоторых X-приложениях отображается как пробел. К счастью, это касается только символов псевдографики в koi8-r (и, соответственно, семейства ERKurier). При выводе на печать из Netscape ситуация с псевдографикой аналогичная... :-( ============ Просьба все замечания, предложения и пожелания по поводу выложенных ps-фонтов и данного readme направлять Евгению Демидову по адресу jack@gpi.ru ║ mailto:jack@gpi.ru