Формати даних


Сучасні принтери здатні працювати в будь-якому режимі — графічному або текстовому. Після включення живлення, апаратного або програмного скидання принтер готовий до отримання текстових даних і команд. Принтери, як правило, працюють в розширеній (8-бітової) таблиці ASCII-кодів. Перші 32 коди (О-lFh) використовуються для управляючих символів, безпосередньо що не відображаються принтером. Далі слідують коди спеціальних символів, цифр, прописних (верхній регістр, uppercase) і рядкових (нижній регістр, lowercase) букв латинського алфавіту. Коди 80-FFh потрібні для знаків національного ( зокрема, російського) алфавіту і символів псевдографіки.

 

Файл BINCOD.CHR є таблицею всіх друкарських символів (управляючі коди пропущені), розташованих по 16 символів в рядку. З управляючих кодів, що використовуються при друці в символьному режимі, особливо відзначимо код повернення каретки (CR, ODh), перекладу рядка (LF, OAh) і формату (FF, ОСh). Якщо принтеру заданий режим AutoLF, то за кодом повернення каретки принтер автоматично виконуватиме і переклад рядка. Цей режим може бути заданий настройкою принтера, а також спеціальним сигналом інтерфейсу Centronics. Файли для друку в кінці кожного рядка, як правило, містять пару кодів — CR і LF( послідовність байтів 0D, ОА), і при їх роздруку в режимі AutoLF пропускатимуться порожні рядки. Звичайно режим AutoLF не використовують. По трактуванню управляючих кодів серед матричних принтерів поширено дві основні системи команд: IBM (для принтера IBM ProPrinter) і Epson. Практично всі команди зміни режимів друку (перемикання шрифтів, зміна розміру, ефекти друку і т. п.), а також перемикання, в графічний режим починаються з коду Escape (Esc, lBh). Далі слідує один або більше байтів коду команди;формат послідовності визначається першим байтом (командою), наступним за кодом Esc. Вся ця конструкція називається Escape-послідовністю.

Для графічного друку існує безліч мов з своїми системами команд.

В матричних принтерах використовувалися два режими друку — бітовий образ і растровий режим.

Бітовий образ був цілком природним для перших 8-9-голкових принтерів. В цьому режимі блок графічних даних несе байти, що відповідають за друк однієї колонки всіх голок головки принтера. Для 9-голчатих принтерів було зручне друкувати колонки з 8 крапок (щоб колонка уміщалася в байт), молодшому біту байта відповідала верхня голка. Байти задавали сусідні колонки, зліва направо. Escape-послідовність графічного елемента рядка складається з команди друку, кода режиму (дозволи), числа колонок в рядку (2 байти), за якими слідує необхідне число байтів даних для кожної колонки. Графічний принтер інтерпретуватиме цю послідовність як блок графічних даних, а наступні байти — як нову команду або символ тексту. Для 24-голчатих принтерів кожну колонку задають три байти графічних даних. Рядок буде надрукований після подачі символів CR, LF. В рядку може бути декілька графічних блоків, розташованих один за одним, і вони навіть можуть чергувати (або поєднуватися) з текстовими символами, але використовувати цю можливість програмно незручно. Для графічного друку потрібно окремо програмувати і вертикальний крок переміщення паперу (міжрядкова відстань). Управляючи кроком і графічним режимом, можна вибирати необхідний дозвіл по вертикалі і горизонталі. Бітовий образ придатний тільки для чорно-білого друку; він незручний тим, що формат блоку даних залежить від числа голок принтера (бувають і 24-, і 48-голчаті принтери).

В растровому режимі чорно-білого друку кожний байт графічних даних несе інформацію про горизонтальну групу з восьми точок лінії; старший біт відповідає лівій крапці, наступні один за одним байти відображаються зліва направо. Після байтів, що описують одну лінію, слідують байти наступної лінії (зверху вниз), і так до кінця сторінки (аналогічно образу екрану в графічному режимі). Для кольорового друку формат дещо складніше, але загальна ідея зберігається. Растровий режим природний для лазерних принтерів — він відповідає способу формування зображення на барабані. Цей режим підтримують і багато сучасних струменевих принтерів. Логічно цей формат зручніше, оскільки він не залежить від числа сопел, правда, вимагає досить великої буферної пам'яті принтера, але на сучасному етапі розвитку техніки це вже не проблема. Растровий режим дозволяє представити будь-яке зображення. Проте тут (як і при бітовому образі) об'єм передаваних даних росте пропорційно твору вертикального і горизонтального дозволу (dpi) на розміри зображення (в дюймах) і число бітів на піксель для кольорового друку.

Для лазерних принтерів фірма Hewlett-Packard розробила спеціальну мову PCL (Printer Control Language), в якій окрім управляючих команд, аналогічних Escape-послідовностям матричних принтерів, є і графічні, що описують малювання геометричних примітивів. В мові є і засоби роботи з вбудованими шрифтами принтера, включаючі масштабування і повороти букв. Мову PCL підтримують і ряд струменевих принтерів. Використовування мови PCL дозволяє скоротити об'єм даних, передаваних принтеру для друку складних зображень, що складаються з тексту і графіки, в порівнянні з растровим форматом. Особливо ця економія істотна для високого дозволу і кольорового друку — для PCL об'єм передаваної інформації не так сильно залежить від дозволу і кольоровості. Проте для використовування цих переваг мову PCL повинен «розуміти» і додаток, що здійснює графічний вивід. Підтримка PCL цілком природна додатки з векторною графікою (включаючи текстові процесори і видавничі системи). Суто растрові системи, природно, генеруватимуть команди растрового друку.

Мова PostScript також призначена для лазерних принтерів. В цій мові вся сторінка описується у векторному вигляді. Шрифти задаються контурами (лініями Безье), і їх растеризуванням (в потрібному кольорі) займається вбудований процесор принтера, відповідно до можливостей принтера і вибраного дозволу друку. Векторний опис всіх об'єктів (символів і геометричних фігур) забезпечує можливість точного виконання перетворень (масштабування, позиціонування, повороти, дзеркальні віддзеркалення). При цьому файл друку не залежить від типу принтера (або іншого пристрою) — потрібна тільки підтримка версії мови, на якій створений файл. Шрифти, що використовуються для відображення сторінки, передаються у файлі друку в компактному уторованому вигляді. Крім того, принтер PostScript має велику кількість стандартних вбудованих шрифтів, які дозволяють ще більше економити об'єм передаваних даних. Реалізація PostScript вимагає наявності у принтера могутнього вбудованого процесора, ОЗУ і ПЗП великого об'єму.

Для плоттерів, які одержують виключно векторні команди малювання, існує декілька різних мов. Загальноприйнятою є мова HP-GL, його розуміють всі плоттери і практично всі прикладні програми, що використовують графічний вивід на плоттер. Для плоттерів, особливо пір'яних, актуальна оптимізація вхідних даних. Наприклад, при багатоколірних зображеннях набагато вигідніше намалювати спочатку всі елементи одного кольору, потім іншого. Програми, генерувальні дані для малювання, звичайно поступають інакше: вони «відпрацьовують» зображення по об'єктах. Серія дрібних багатоколірних об'єктів породить часту зміну пер, за кожним з яких головка повинна «збігати» до магазина. Іноді має сенс використовувати додаткові програми-оптимізатори, вхідними даними для яких служить вихідний файл графічного додатку.

Оскільки між друкуючим (креслячим) додатком і принтером (плоттером) завжди знаходиться програмний драйвер, при невідповідності їх мов майже завжди потрібен драйвер-транслятор. Так, наприклад, матричний принтер, не русифікований на апаратному рівні, можна русифікувати програмно. Переважно використовувати завантажуваний знакогенератор принтера — для цього комп'ютер повинен послати в принтер блок даних певного формату, що містить команди завантаження і власне вміст знакогенератора. Проте таке завантаження повинне виконуватися кожного разу після включення принтера; драйвер повинен відстежувати стан принтера (по сигналах інтерфейсу), і своєчасно підвантажувати знакогенератор. Проте не всі принтери мають таку нагоду. Простіше йде справа, коли у принтера є знакогенератор з російськими буквами, але вони розташовані в іншому порядку, ніж потрібно. В цьому випадку драйвер-русифікатор повинен просто перекодувати символи по таблиці. Правда, для цього йому вимагається «розуміти» графічні команди принтера і прозоро (без перетворення) пропускати графічні дані. Якщо принтер взагалі не має потрібного алфавіту і завантажуваного знакогенератора, доводиться друкувати текст в графічному режимі. Для цього драйвер повинен виконувати растеризацію символів, невідомих принтеру або всіх підряд (для однорідності), і виводити їх на принтер в графічному режимі. При цьому більш ніж на порядок зростає об'єм передаваної інформації, що уповільнює швидкість друку, особливо при малопотужному процесорі (час витрачається і на растеризацію, і на власне вивід даних). Апаратна або програмна русифікація принтерів актуальна лише для друку текстових файлів засобами DOS. Додатки Windows використовують графічні режими принтерів, і питання русифікації вже переходять в чисто програмну область (драйвери і системні шрифти). Проте друк в графічному режимі на матричних голчатих принтерах хоча і можливий, але за нинішніми мірками дуже повільний і галасливий. Для такого друку більше підходять струменеві, а ще краще — лазерні принтери.

Програмний драйвер може реалізовувати графічну мову, не підтримувану принтером. Так, наприклад, є програмні реалізації мови PostScript. Проте при цьому центральний процесор комп'ютера навантажується об'ємній 'задачі растеризації, причому в ОЗУ повинен уміщатися весь растровий образ сторінки, що виводиться. Крім того, на принтер виводитиметься величезний об'єм даних, що особливо неприємно при мережному підключенні принтера. Отже при великих об'ємах друку краще використовувати теперішній час (апаратний) PostScript, а не користуватися його програмною емуляцією.

З вище сказаного цілком зрозуміло, що драйвер принтера повинен відповідати типу принтера і його мовним можливостям. Так, наприклад, при використовуванні принтера з PostScript про це повинен «знати» драйвер принтера, інакше графічний вивід проводитиметься завжди в растровому режимі і ніяких переваг апаратного PosScript користувач не отримає.