Вывод информации на указанные принтеры следует осуществлять на уровне MS-DOS. Для этого фирмой Хьюлетт - Паккард созданы командные языки PCL, осуществляющие вывод информации как на лазерный, так и на чернильный принтеры.
В состав этого языка входят следующие операторы:
– управления принтером,
– описания страницы,
– изменения координат текущей позиции вывода,
– выбора шрифта,
– управления загрузкой шрифтов,
– определение новых загружаемых шрифтов,
– графические,
– установки модели печати,
– определение макросов,
– отладки вывода.
Инициализация принтера относится к группе управляющих операторов иосуществляется следующим образом
Esc E
что в шестнадцатиричной системе счисления соответствует набору чисел: 1В 45, а в десятичной - 27 69.
Для ввода этих кодов в буфер принтера необходимо открыть файл вывода LPT1.
fp = fopen (“lpt1”, “wb”);
и записать инструкцию
fprint (fp, “%c%c”, “27, 69”);
Далее оператором fprintf () можно ввести и другие необходимые команды в виде кодов, представляющих различное количество однобайтовых констант.
Стандартными функциями библиотеки языка Си можно вывести на принтер необходимую текстовую информацию. Например, оператор printf (“%c”, 65) осуществит вывод на печать литеры А, так как ее ASCII - код равен 65. Оператор printf (“%c”, n) осуществит вывод на печать значения байтовой переменной n. Аналогично просто осуществляется вывод и графических документов. При этом целесообразно выполнить следующие команды.
Из операторов управления принтером кроме инициализации следует установить альбомную или книжную ориентацию листа печати, используя следующую команду
Esc &1 #z (книжная ориентация),
что на языке Си будет
fprintf (fp, “%c%c%c%c%c, 27, 38, 108, 48, 79)
Устанавливается формат печати. Так для формата А4 будет команда
fprintf (fp, “%c%c%c%c%c%c”, 27, 38, 108, 50, 54, 65)
Далее уже устанавливается режим графики. Вначале назначается разрешающая способность растрового рисунка по команде
Esc *t ### R
При этом вместо значков ### ставится одно из чисел: 75; 100; 150 или 300 пунктов на дюйм. Задаваясь числом 75 запишем соответствующий оператор
fprintf (fp, “%c%c%c%d%c”, 27, 42, 116, 75, 82)
Далее устанавливается прямое (без поворота) положение рисунка по команде
ESC *r 3F
fprintf (fp, “%c%c%c%c%c”, 27, 42, 114, 51, 70)
его левая граница
ESC *r 1A
fprintf (fp, “%c%c%c%c%c”, 27, 42, 114, 49, 65)
При этом левая граница устанавливается в текущую позицию.
После этого вводится команда уплотнения данных ESC *b #M, где вместо # вводится число 0 - без уплотнения, 1 - RLE - уплотнение, 2 - TIFF - уплотнение, 3 - Delta Row. Полагая данные не уплотненными запишем оператор fprintf (fp, “%c%c%c%c%c”, 27, 42, 98, 48, 77)
Теперь по команде
ESC *b #w [данные]
можно выводить графический материал. Например, задаваясь n = 0xFF оператор fprintf (fp, “%c%c%c%d%c%c”, 27, 42, 98, 1, 87, n) выведет черту длиной в 8 пунктов в соответствии с установленным разрешением.
В данном операторе четвертый элемент данных обозначает длину данных в байтах. В приведенном примере он равен единице. В таком виде графические данные оператор всегда будет выводить с новой строки.
Для того, чтобы данные выводились и дальше в одной строке следует отдельно выделить оператор
fprintf (fp, “%c%c%c%d%c”, 27, 42, 98, x, 87);
в котором х обозначает длину в байтах выводимых в последующем данных. Например при n = 0xFF и x = 10 конструкция
while (i<=10) {fprintf (fp, “%c”, n); i = i+1}
осуществит десятикратный вывод в одну строку восьми пунктов. Практически это изобразит прямую линию.
В заключении отметим, что чернильные принтеры выпускаются и фирмой Epson (Япония). Командный язык этих принтеров не PCL, а соответствующий языку иголочных принтеров. Его контрольные коды (команды) приведены в руководстве пользователя принтером. Здесь приведены лишь некоторые особенности.
Вывод битовой маски осуществляется командой Esc *, после которой следуют и соответствующие данные.
Кроме этой команды в данном языке имеются следующие команды инициализации графики ESC (G, Esc, выбора цвета Esc r и установки микроволнового режима работы (Micro Weave) Esc (i).