Евгений Демидов. Русификация печати на PS-принтере и в Unix Netscape
Оригинал этого документа расположен на
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-type1_koi8_afm.tgz. . . . . . [Aug 7 07:18] 29k
gs-type1_koi8_fonts.tgz. . . . . [Apr 15 14:08] 627k
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-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
и также разархивировать его в /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) словами.
Здесь не обязатьельно русифицировать 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".
ВНИМАНИЕ тем, кто забирал файлы
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
Last-modified: Wed, 02 Sep 1998 05:30:04 GMT