ВВЕДЕНИЕ
Зачем нужны
Esc последовательностиВ те далекие годы, когда не было матричных, струйных и лазерных принтеров, когда не было в ходу слова принтер, а печатающее устройство называлось АЦПУ, не было и
Esc (Эскейп) последовательностей. Процесс печати осуществлялся достаточно просто. Для печати, на устройство выдавались символы, и ими в АЦПУ заполнялся небольшой буфер, размером 80 (или 132, ну максимум 256) символов. Когда буфер заполнялся целиком, строка печаталась. А если надо было отпечатать раньше, чем был заполнен буфер, выдавалась команда LF (Line Feed Перевод строки). Для окончания печати листа соответственно выдавалась команда FF (Form Feed Прогон Формата). И еще, была команда CR (Carrige Return Возврат Каретки) по которой производилась очистка буфера. Все эти команды выдавались как обычные символы. Вот этими–то тремя командами и осуществлялось управление печатью.Для того чтобы сменить шрифт, надо было менять барабан (ни разу не слышал, чтобы кто-нибудь это делал). Графики никакой не было и в помине. Ситуация изменилась с появлением матричных принтеров на базе микропроцессоров. У них шрифт зашивался в ПЗУ и мог загружаться в ОЗУ. Кроме того, можно было управлять другими возможностями печати и форматирования. Эти-то возможности и реализуются с помощью
Esc последовательностей.Esc имеет десятичный код 27 (Hex код 1В). Этот код выдается как обычный символ, но он не печатается, а переводит принтер в режим приёма команды. Символы, следующие за ним, воспринимаются принтером как команда управления. Принтер пытается распознать их как команду, входящую в его набор команд и если это ему удается, то он ее выполняет. Следующие за командой символы воспринимаются как обычный текст, предназначенный для печати (конечно, если это не следующая Esc последовательность).
Предупреждение: Принтеры разных фирм изготовителей имеют различные системы команд (Esc последовательностей), и, именно поэтому, нет универсальных драйверов, а для каждого принтера требуется свой драйвер. Более того, даже принтеры одной и той же фирмы могут иметь разные системы команд.
Получение информации о
Esc последовательностяхПолучить информацию о
Esc последовательностях можно либо из Технического описания на принтер (например с LQ-100+ поставляется ТО в котором они есть), либо зайдя на сервер соответствующей фирмы (например www.hp.com фирма Hewlett-Packard). Информация, впрочем, и там и там на английском.Посмотреть команды можно и таким способом (ноу хау автора):
Последовательность выдаваемых команд является существенной. Так модель
HP Deskjet 350 PC, с которой я работаю, похоже, целиком формирует страницу для печати и затем по команде Plain Paper ее печатает.Далее приводится перевод для
Esc последовательностей с моими комментариями. Комментарии даются для тех команд, которые я проверил. Команды приведены для модели HP Deskjet 350 PC. Просто потому, что она стоит на моем рабочем столе. Дополнительную информацию мне пока не удалось получить на сервере.Выдадим букву А в латинском регистре. И обнаружим массу интересного.
¬
¬
ВВЕДЕНИЕ.
HP предоставляет язык PCL, который стандартизирует доступ к возможностям принтера. Язык PCL предоставляет наивысший уровень обмена между системой и принтером. Он не зависит от системы, драйвера , интерфейса и сетевых коммуникаций. Этот документ описывает команды HP Deskjet PCL для форматирования и выбора шрифтов. Если требуется дальнейшая информация, пожалуйста зайдите на Web сайт www.hp.com/ solutions.
Об использовании PCL команд.
В PCL имеется два основных типа команд:
Управляющие коды - это символы вызывающие функции принтера (например возврат каретки (
CR) Перевод Строки (LF) Прогон Формате (FF) и т.д.Esc последовательности начинаются с кода Esc (десятичное значение 27) и следующим за ним, по крайней мере, одним иным символом. Устройство получившее Esc код пытается интерпретировать дальнейшие символы как команду PCL до того как данные будут отпечатаны. Если устройство не распознает команду, оно возвращается в режим текста: синтаксически правильная, но нераспознанная последовательность игнорируется; синтаксически некорректная последовательность игнорируется и печатается.
Синтаксис Esc последовательностей.
Имеется два типа
PCL Esc последовательностей.Двух - символьные последовательности.
Двух - символьные
Esc последовательности имеют следующий вид: Esc X, где “Х” любой другой символ определяющий операцию, которая будет выполняться.Замечание: Х может быть любым символом таблицы
ASCII в диапазоне 48-126 (десятичн.) [“0” до “~”].Параметрические Esc последовательности.
Параметрические
Esc последовательности имеют следующий вид:Соответствие между ASCII, Hex, и десятичными значениями.
значение |
десятичное |
Hex формат |
|
0 |
48 |
30 |
|
1 |
49 |
31 |
|
2 |
50 |
32 |
|
3 |
51 |
33 |
|
4 |
52 |
34 |
|
5 |
53 |
35 |
|
6 |
54 |
36 |
|
7 |
55 |
37 |
|
8 |
56 |
38 |
|
9 |
57 |
39 |
|
. |
46 |
2E |
Сводная таблица команд
PCL принтера.Замечание
: Команды принтера отмеченные * описываются в том порядке, в котором они должны передаваться. Символ # означает значение числового параметра.Пробелы в примерах стоят для удобочитаемости и в последовательности их нет.
Управление принтером
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Сброс |
Reset |
Esc E |
1B 45 |
Авто-тест |
Self-test |
Esc z |
1B 7A |
Управление вводом бумаги |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Выбросить бумагу |
Eject Page |
Esc & / 0 H |
1B 26 6C 30 48 |
Portable Sheet Feeder |
Esc & / 1 H |
1B 26 6C 31 48 |
|
Manual Feed |
Esc & / 2 H |
1B 26 6C 32 48 |
Подчеркивание |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
По умолчанию |
Default |
Esc & d 0 D |
1B 26 64 30 44 |
Одна сплошная |
Single fixed |
Esc & d 1 D |
1B 26 64 31 44 |
Двойная сплошная |
Double fixed |
Esc & d 2 D |
1B 26 64 32 44 |
Single floating |
Esc & d 3 D |
1B 26 64 33 44 |
|
Double floating |
Esc & d 4 D |
1B 26 64 34 44 |
|
Выключено |
Turn off |
Esc & d @ |
1B 26 64 40 |
Разницы между командами Default и Single floating, а также Single fixed и Do
uble floating я не обнаружил.
Line termination Окончание строки |
|||
Команда (рус) |
Команда (англ.) |
Последов . |
Hex формат |
CR=CR; LF=LF; |
Esc & k 0 G |
1B 26 6B 30 47 |
|
CR=CR+LF; LF= LF; |
Esc & k 1 G |
1B 26 6B 31 47 |
|
CR=CR; LF= CR+LF; |
Esc & k 2 G |
1B 26 6B 32 47 |
|
CR= CR+ LF; LF=CR+LF; |
Esc & k 3 G |
1B 26 6B 33 47 |
End of line wrap |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Включить |
Tern on |
Esc & k 0 C |
1B 26 73 30 43 |
Выключить |
Tern off |
Esc & k 1 C |
1B 26 73 31 43 |
Не понял для чего.
Transparent print mode |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
# of bytes |
Esc & p # [data] |
1B 26 70 # 58 |
Не понял для чего.
Display functions mode |
|||
Команда (рус) |
Команда (англ. ) |
Последовательность |
Hex формат |
Tern on |
Esc Y |
1B 59 |
|
Tern off |
Esc Z |
1B 5A |
Не понял для чего /возможно для двустороннего обмена данными/ после выдачи команды включения принтер вообще перестает воспринимать последовательности
Управление страницей
Page control
Ориентация страницы Page orientation* |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Книжная |
Portrait |
Esc & / 0 O |
1B 26 6C 30 4F |
Альбомная |
Landscape |
Esc & / 1 O |
1B 26 6C 31 4F |
Качество печати Print quality |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Низкое |
Economy/Draft |
Esc * o –1 M |
1B 2A 6F 2E 31 4D |
Обычное |
Normal |
Esc * o 0 M |
1B 2A 6F 30 4D |
Качественная |
Best |
Esc * o 1 M |
1B 2A 6F 31 4D |
Media type |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Печать текста |
Plain Paper |
Esc & / 0 M |
1B 26 6C 30 4D |
Bond Paper |
Esc & / 1 M |
1B 26 6C 31 4D |
|
Special |
Esc & / 2 M |
1B 26 6C 32 4D |
|
Glossy Paper |
Esc & / 3 M |
1B 26 6C 33 4D |
|
Transparencies |
Esc & / 4 M |
1B 26 6C 34 4D |
Выдача команды Plain Paper приводит к распечатке текста.
Размеры бумаги Paper sise* |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
U.S. Executive |
Esc & / 1 A |
1B 26 6C 31 41 |
|
U.S. Letter |
Esc & / 2 A |
1B 26 6C 32 41 |
|
U.S. Legal |
Esc & / 3 A |
1B 26 6C 33 41 |
|
JIS A5 |
Esc & / 25 A |
1B 26 6C 32 35 41 |
|
JIS A4 |
Esc & / 26 A |
1B 26 6C 32 36 41 |
|
Hagaki Card |
Esc & / 71 A |
1B 26 6C 37 31 41 |
|
ISO A6 Card |
Esc & / 73 A |
1B 26 6C 37 33 41 |
|
U.S.- 4 x 6 Card |
Esc & / 74 A |
1B 26 6C 37 34 41 |
|
U.S.- 5 x 8 Card |
Esc & / 75 A |
1B 26 6C 37 35 41 |
|
Custom |
Esc & / 101 A |
1B 26 6C 31 30 31 41 |
Line spacing |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Линий на дюйм |
Lines per inch |
Esc & / # D |
1B 26 6C # 44 |
Длина страницы Page length* |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
# of Lines, (5-128 are valid) |
Esc & / # P |
1B 26 6C # 50 |
Perforation skip mode* |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Off |
Esc & / 0 L |
1B 26 6C 30 4C |
|
On |
Esc & / 1 L |
1B 26 6C 31 4C |
Для печати на бумаге с перфорацией.
Отступы Margins* |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Сверху |
Top (# of lines) |
Esc & / # E |
1B 26 6C # 45 |
Сброс отступов |
Clear Side Margins |
Esc 9 |
1B 39 |
Слева |
Left (column #) |
Esc & a # L |
1B 26 61 # 4C |
Справа |
Right (column #) |
Esc & a # M |
1B 26 61 # 4D |
Длина текста Text le ngth* |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
# of Lines |
Esc & / # F |
1B 26 6B # 48 |
Позиционирование курсора Cursor positioning |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Горизонтальное перемещение в |
Horizontal motion index, # of 1/120th inch moves |
Esc & k # H |
1B 26 6B # 48 |
Горизонтальное перемещение |
Horizontal Move (to column #) |
Esc & a # C |
1B 26 61 # 43 |
Горизонтальное перемещение |
Horizontal Move (# of decipoints) |
Esc & a # H |
1B 26 61 # 48 |
Горизонтальное перемещение в |
Horizontal Move (# of PCL units) |
Esc & / # X |
1B 26 6C # 58 |
Вертикальное перемещение в |
Vertical motion index, # of 1/48th inch moves |
Esc & / # C |
1B 26 6C # 43 |
Вертикальное перемещение в |
Vertical Move |
Esc & a # R |
1B 26 61 # 52 |
Вертикальное перемещение |
Vertical Move |
Esc & a # V |
1B 26 61 # 56 |
Вертикальное перемещение в |
Vertical Move |
Esc * p # Y |
1B 2A 70 # 59 |
Эти команды у меня не работают.
Выбор шрифта Font selection
Установка шрифта Simbol set* |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
HP Roman 9 |
Esc ( 4 U |
1B 28 34 55 |
|
HP Roman 8 |
Esc ( 8 U |
1B 28 38 55 |
|
PC-8 (IBM-8) |
Esc ( 10 U |
1B 28 31 30 55 |
|
PC-8 Danish/Norv |
Esc ( 11 U |
1B 28 31 31 55 |
|
HP Legal |
Esc ( 1U |
1B 28 31 55 |
|
United Kingdom |
Esc ( 1 E |
1B 28 31 45 |
|
ANSI ASCII |
Esc ( 0 U |
1B 28 30 55 |
|
Swedish Names |
Esc ( 0 S |
1B 28 30 53 |
|
Italian (ISO 15) |
Esc ( 0 I |
1B 28 30 49 |
|
Spanish (ISO 17) |
Esc ( 2 S |
1B 28 32 53 |
|
German (ISO 21) |
Esc ( 1 G |
1B 28 31 47 |
|
Norwegian1 |
Esc ( 0 D |
1B 28 30 44 |
|
French (ISO 69) |
Esc ( 1 F |
1B 28 31 46 |
|
ISO 8859/1 Latin-1 |
Esc ( 0 N |
1B 28 30 4E |
|
ISO 8859/2 Latin-2 |
Esc ( 2 N |
1B 28 32 4E |
|
ISO 8859/15 |
Esc ( 9 N |
1B 28 39 4E |
|
ISO 8859/9 Latin-5 |
Esc ( 5 N |
1B 28 35 4E |
|
PC-852 Latin-2 |
Esc ( 17 U |
1B 28 31 37 55 |
|
PC 858 Europe |
Esc ( 13 U |
1B 28 31 33 55 |
|
PC-8 Turkish |
Esc ( 9 T |
1B 28 39 54 |
|
Win 3.1 Latin 1 |
Esc ( 19 U |
1B 28 31 39 55 |
|
Win 3.1 Latin 2 |
Esc ( 9 E |
1B 28 39 45 |
|
Win 3.1 Latin 5 |
Esc ( 5 T |
1B 28 35 54 |
А вот Русского языка я что-то не нашел. Не очень то они нас уважают.
Тип шрифта Spacing* |
||||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
|
Пропорциональный |
Proportional |
Esc ( s 1 P |
1B 28 73 31 50 |
|
Моноширинный |
Fixed |
Esc ( s 0 P |
1B 28 73 30 50 |
|
Print pitch* |
||||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
|
Размер в дюймах |
# of character per inch |
Esc ( s # H |
1B 28 73 # 48 |
|
Point size (character height)* |
||||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
|
Размер в пунктах |
# 0f 1/72nd inch |
Esc ( s # V |
1B 28 73 # 56 |
|
Style* |
||||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
|
Прямой |
Upright (normal) |
Esc ( s 0 S |
1B 28 73 30 53 |
|
Наклонный |
Italic |
Esc ( s 1 S |
1B 28 73 31 53 |
|
Stroke weight* |
||||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
|
Узкий |
Normal |
Esc s 0 B |
1B 28 73 30 42 |
|
Широкий |
Bold |
Esc s 3 B |
1B 28 73 33 42 |
|
Typeface* |
||||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
|
Courier |
Esc ( s 3 T |
1B 28 73 54 |
||
CG Veranda, Helvetica, Arial, san-serif |
Esc ( s 4101 T |
1B 28 73 34 31 30 31 54 |
||
Letter Gothic |
Esc ( s 6 T |
1B 28 73 36 54 |
||
Univers |
Esc ( s 4148 T |
1B 28 73 34 31 34 38 54 |
Графика
Запуск растровой графики Start raster grafics |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
С левой позиции |
At left most position |
Esc * r 0 A |
1B 2A72 30 41 |
От курсора |
Current Cursor Position |
Esc * r 1 A |
1B 2A72 30 41 |
Завершение растровой графики End raster grafics |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
End Grafics |
Esc * r C |
1B 2A 72 43 |
|
Разрешение Resolution |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
75 dots per inch |
Esc * t 75 R |
1B 2A 74 37 35 52 |
|
100 dots per inch |
Esc * t 100 R |
1B 2A 74 31 30 30 52 |
|
150 dots per inch |
Esc * t 150 R |
1B 2A 74 31 35 30 52 |
|
300 dots per inch |
Esc * t 300 R |
1B 2A 74 31 30 30 52 |
|
600 dots per inch |
Esc * t 600 R |
1B 2A 74 36 30 30 52 |
|
Raster depletion |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
No Depletion |
Esc * o 1 D |
1B 2A 6F 31 44 |
|
Качество Rast er Quality obsolete |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Default |
Esc * r 0 Q |
1B 2A 72 30 51 |
|
Draft |
Esc * r 1 Q |
1B 2A 72 31 51 |
|
High |
Esc * r 2 Q |
1B 2A 72 32 51 |
Установка ширины графики Set raster grafics width |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Ограничение ширины графики |
# of picsel |
Esc * r # S |
1B 2A 72 # 53 |
Метод сжатия Set raster graphics sompression |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Noun (off) |
Esc * b 0 M |
1B 2A 62 30 4D |
|
Method 1 |
Esc * b 1 M |
1B 2A 62 31 4D |
|
Method 2 |
Esc * b 2 M |
1B 2A 62 32 4D |
|
Method 3 |
Esc * b 3 M |
1B 2A 62 33 4D |
|
Method 9 |
Esc * b 9 M |
1B 2A 62 39 4D |
|
Seed Row Source |
Esc * b # S |
1B 2A 62 # 53 |
|
По предыдущим строкам Seed Row Source |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Same plane of previos row |
Esc * b 0 S |
1B 2A 62 30 53 |
|
Previos plane |
Esc * b 1 S |
1B 2A 62 31 53 |
|
2nd previos |
Esc * b 2 S |
1B 2A 62 32 53 |
|
3nd previos |
Esc * b 3 S |
1B 2A 62 33 53 |
Передача графики Transfer raster graphics |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Печать по строкам |
Transfer by row |
Esc * b # W [data] |
1B 2A 62 # 57 [data] |
Не работает |
Transfer by plane |
Esc * b # V [data] |
1B 2A 62 # 56 [data] |
Relative vertical pixel movement (formerly known as Raster Y offset) |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
Вертикальное смещение |
Relative # of dots |
Esc * b # Y |
1B 2A 62 # 59 |
Смещает вниз следующий фрагмент графики.
Set number of raster planes per row |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
3 planes, CMY palette |
Esc * r –3 U |
1B 2A 72 2D 33 55 |
|
K (black plane) |
Esc * r 1 U |
1B 2A 72 31 55 |
|
3 planes, RGB palette |
Esc * r 3 U |
1B 2A 72 33 55 |
Это только для цветной печати.
Text (Forground Color) Assumes KCMY 4-plane palette selected |
|||
Команда (рус) |
Команда (англ.) |
Последовательность |
Hex формат |
White |
Esc * v 0 S |
1B 2A 76 30 53 |
|
True Black |
Esc * v 1 S |
1B 2A 76 31 53 |
|
Cyan |
Esc * v 2 S |
1B 2A 76 32 53 |
|
Magenta |
Esc * v 4 S |
1B 2A 76 34 53 |
|
Blue |
Esc * v 6 S |
1B 2A 76 36 53 |
|
Yellow |
Esc * v 8 S |
1B 2A 76 38 53 |
|
Green |
Esc * v 10 S |
1B 2A 76 31 30 53 |
|
Red |
Esc * v 12 S |
1B 2A 76 31 32 53 |
|
CompositeBlack |
Esc * v 14 S |
1B 2A 76 31 34 53 |
Цвет текста (передний план).
Работа с графикой
Почему-то мне не удалось рисовать графику в промежуточном положении листа. Независимо от того, выдаю я команду
At left most position или Current Cursor Position все равно графика рисует с самой левой позиции. Если выдавался текст, графика начнется с начала следующей строки.Если выдать команду
Set raster grafics width, то при передаче лишней информации, она будет потеряна.