При печати на струйном или лазерном принтере вы обычно не используете встроенные шрифты принтера. Вы используете шрифты Windows. Что происходит, так это то, что драйвер принтера либо создает изображение пикселей (включая текст) и отправляет его на принтер, либо отправляет команды, предназначенные для рисования линий, кривых сплайнов и других фигур, на принтер со шрифтами, выраженными в виде линий и сплайнов (контуры).
Когда вы печатаете на старом матричном принтере, вы можете сделать это таким образом, но это медленно. Каждая строка текста должна быть «построена» из пикселей, и часто строки текста не совпадают с проходами печатающей головки (особенно для шрифтов, которые значительно больше или меньше 12-точечных).
Старый способ использования этих принтеров, так, как они предназначались, заключался в отправке фактических кодов ASCII текста на принтер. Отправьте число 65 (десятичное), и вы получите заглавную букву «A», например. Число 49 (десятичное) будет печатать цифру «1», в то время как число 32 будет пробел, 33 восклицательный знак («!») И так далее. Один байт = один символ. У точечно-матричного принтера был свой собственный встроенный шрифт, и он будет искать код ASCII в своем ПЗУ шрифтов и оттуда определять точные моменты времени, в которые печатающие провода должны были бы попадать на страницу именно тогда, когда нужно произвести эти буквы.
Используя коды ESCape, вы можете указать такие эффекты, как псевдо-жирный шрифт (в основном удар по букве дважды, вторая копия смещена вправо только на одну ширину точки), по ширине в два раза (удар по каждому столбцу проводов дважды строка для каждого отдельного раза, когда она обычно ударилась, таким образом удваивая ширину буквы), подчеркивание (ударяя нижний провод печати повсюду независимо от того, требует ли форма буквы этого в этой точке или нет), и так далее.
ПЗУ принтера обрабатывает все эти механические детали, касающиеся печатных проводов и тому подобного. Все, что должна была предоставить ваша программа, - это действительные коды текста ASCII (включая контрольные коды, такие как номер 13 [Carriage Return aka CR], чтобы вернуть печатающую головку на левое поле [или, для двунаправленного принтера, подготовиться к печати следующая строка в обратном порядке по отношению к предыдущей строке], обычно за ней следует номер 10 (перевод строки, иначе LF], чтобы свернуть бумагу на одну строку вверх и подготовиться к печати следующей строки).
Если вы хотите печатать необычными шрифтами, которых нет на принтере, или печатать графику, вам нужно было использовать код ESCape, чтобы установить принтер в «графический режим», в котором вы в основном отправляли байты, биты которых указывали бы на запускать отдельные провода печатающей головки под непосредственным управлением программы, а не искать формы символов в ПЗУ шрифтов принтера. При обычной печати из Windows с использованием драйвера принтера это обычно происходит.
Для принтеров с гирляндой или других принтеров с фиксированными символами ( например, Механизмы типа шарика IBM Selectric) код ASCII будет вращать колесо или шар в нужное положение, а затем ударять по ленте и, таким образом, печатать букву на странице или отправьте правый молоток, чтобы ударить ленту и, следовательно, страницу (TeleType или старый механизм пишущей машинки). С ними невозможно было создать пиксельную графику, за исключением печати многократных периодов и микро-продвижения печатающей головки и бумаги шириной / высотой периода вместо символа / строки текста соответственно (что обычно приводит к износу символа периода очень быстро, поэтому у многих из них были периоды, усиленные металлом, именно по этой причине).