[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по принтерам и печати


Перевод кодовой страницы принтера для многобайтовых кодовых наборов

Процедура перевода многобайтового кодового набора (MBCS) файла печати в кодовый набор отличается от процедуры перевода кодовых символов однобайтового кодового набора (SBCS). Перевод файла печати в кодовый набор в многобайтовой среде осуществляется в два этапа.

На первом этапе исходный кодовый набор файла печати переводится в промежуточный кодовый набор. Этот набор должен быть одним из наборов MBCS, поддерживаемых подпрограммой iconv и базой данных локалей (DB); например, IBM-943, IBM-eucTW или IBM-eucKR. На втором этапе промежуточный кодовый набор переводится в соответствующий выходной кодовый набор для принтера. Перевод кодового набора осуществляется подпрограммой iconv, если она существует. Если исходный или полученный кодовый набор совпадает с промежуточным кодом, то перевод не выполняется.

Атрибуты Ti и To в файле описания конкретного принтера определяют ход процесса перевода кодового набора. Параметр Ti задает сочетание исходного и промежуточного кодовых наборов:

[Исходный_кодовый_набор, ...
]Промежуточный_кодовый_набор, ...

Параметр To задает сочетание промежуточного и выходных кодовых наборов:

Промежуточный_кодовый_набор
[Выходной_кодовый_набор0, Выходной_кодовый_набор1,
Выходной_кодовый_набор2, Выходной_кодовый_набор3,... ], ...

Например, параметр To для принтера, предназначенного для японского языка, определяется следующим образом:

::To::IBM-943[IBM-932, IBM-932, IBM-932], ibm-eucJP[IBM-932,
IBM-932, IBM-932,IBM-932]

Все символы набора с данным идентификатором (CSID) печатаются с использованием шрифтов ПЗУ, если для каждого CSID задан выходной кодовый набор. В противном случае применяются битовые образы шрифтов из Xwindows. Тип файлов шрифтов Xwindows, включающих образ шрифта каждого CSID, определяется с помощью файла из каталога /usr/lib/X11/nls.

Таблицы перевода кодовой страницы принтера для многобайтовых кодовых наборов

Таблица перевода задает соответствие между кодовыми знаками, которые не могут использоваться совместно двумя кодовыми наборами. Базовая программа принтера может взаимодействовать с другими кодовыми наборами, даже если они не поддерживаются подпрограммой iconv, используя таблицу перевода из каталога /usr/lib/lpd/pio/transJP. Если исходный или выходной кодовый набор не поддерживается подпрограммой iconv, то неподдерживаемый кодовый набор переводится в один из поддерживаемых кодовых наборов или непосредственно в промежуточный кодовый набор с помощью таблиц перевода из каталога /usr/lib/lpd/pio/transJP. Пользователи root могут добавлять новые кодовые наборы для принтеров, создавая свои таблицы перевода.

Имена новых таблиц перевода следует задавать в формате Имя_исходного_кодового_набора_Имя_целевого_кодового_набора. Все таблицы перевода должны быть определены в файле trans_dir. Исходные кодовые знаки f_cp в таблице перевода должны быть заранее упорядочены по алфавиту.

Файлы trans_dir и codeset.alias находятся в каталоге /usr/lib/lpd/pio/transJP. Исходные кодовые знаки f_cp в таблице перевода должны быть заранее упорядочены по алфавиту.

Формат файла trans_dir следующий: Формат файла trans_dir следующий:

Имя_исходного_кодового_набора
Имя_целевого_кодового_набора Имя_файла_перевода

Псевдонимы кодовых наборов задаются в файле codeset.alias. Формат файла codeset.alias следующий:

Имя_кодового_набора Псевдоним ...

Например, для того чтобы напечатать на принтере IBM-943 файл MBCS, который был записан с использованием нового кодового набора, выполните следующие действия:

  1. Создайте таблицу перевода в каталоге /usr/lib/lpd/pio/transJP. В соответствии с соглашением об именах, новый файл следует назвать Имя_нового_кодового_набора_IBM-943.
  2. Определите таблицу перевода в файле trans.dir. Формат описания нового кодового набора с именем Новый_кодовый_набор следующий:

    newcodeset IBM-943 Новый_кодовый_набор_IBM-943
    
  3. При необходимости задайте псевдоним в файле trans.alias.
  4. Добавьте имя кодового набора в качестве исходного кода в файл описания, например:

    ::Ti::[Имя_нового_кодового_набора,
    ...]IBM-943, ...
    

Применение шрифтов Xwindows в команде qprt

Для печати символов, которые отсутствуют в ПЗУ принтера, базовые программы принтеров MBCS используют шрифты Xwindows, определенные в каталоге /usr/lib/X11/fonts. Шрифты Xwindows для принтера задаются флагами -F и -I команды qprt. Значения этих параметров команды qprt по умолчанию задаются в файле описания как значения атрибутов _F и _I.

Флаг qprt -F определяет шрифт. С флагом -F может применяться полное имя, псевдоним шрифта или Описание логической функции Xwindow (XLFD) шрифта Xwindows.

Флаг -I содержит путь к каталогу, в котором находятся шрифты Xwindows, и создает запись атрибута _I. Формат атрибута _I в файле описания следующий:

::_I::/usr/lib/X11/fonts/JP,/usr/lib/X11/fonts

Если пользователь указывает другой путь к шрифту в команде qprt -I, то базовая программа принтера ищет шрифты в этом каталоге, а не в каталогах, заданных по умолчанию в атрибуте _I файла описания. Если параметру -I присвоено пустое значение, то базовая программа выполняет поиск в каталоге по умолчанию, /usr/lib/X11/fonts.

Для того чтобы задать шрифт Xwindows с помощью полного имени, псевдонима шрифта или XLFD, введите:

$ qprt -F '*-27-*-ibm_udcjp' foo.txt    /* Список имен XLFD */
$ qprt -F IBM_JPN17                     / * Псевдоним шрифта */

В этом примере базовой программе принтера MBCS сообщается, что она должна найти подходящие шрифты для кодового набора, заданного в параметре -X команды qprt, в файлах fonts.alias и fonts.dir.

Пример таблицы перевода

#include <fcntl.h>
struct trans_table              /*Структура таблицы перевода   */
{
       unsigned int reserv1;    /* Зарезервировано             */
       unsigned int f_cp;       /* Исходный кодовый знак       */
       unsigned int reserv2;    /* Зарезервировано             */
       unsigned int t_cp;       /* Целевой кодовый знак        */
};
/*
*Таблица перевода кодовых знаков исходного кодового набора (Новый_кодовый_набор)
*в кодовые знаки промежуточного кодового набора (IBM-943).
*/
struct trans_table table[] = 
{
        {0x0,0x81ca,0x0,0xfa54},{0x0,0x9e77,0x0,0x954f},\
        {0x0,0x9e8d,0x0,0x938e},
        /*  ....    */
        [0x0,0xfad0,0x0,0x8d56}
};
/* Запись таблицы. Об ошибках обработки не сообщается.  */
main()
{
        int ftrans;
        long hdsize = 32;        /* Размер заголовка           */
        long cpsize = 4;         /* Размер кодового знака      */
        long rsv1 = 0, rsv2 = 0; /* Зарезервированная область  */
ftrans = open("usr/lib/lpd/pio/transJP/newcodeset_IBM-932",
                O_CREAT | O_WRONLY, 0664);
write(ftrans, "PIOSMBCSXLATE000", 16);
write(ftrans, &hdsize, sizeof(long));
write(ftrans, &cpsize, sizeof(long));
write(ftrans, &rsv1, sizeof(long));
write(ftrans, &rsv2, sizeof(long));
write(ftrans, table, sizeof(table));
return(0);
}


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]