печать на матричном принтере в .net - PullRequest
1 голос
/ 16 января 2009

любой может подсказать код, как печатать документы на матричном принтере в приложении C # windows.

Ответы [ 4 ]

9 голосов
/ 16 января 2009

Вы можете печатать на матрицу точек «графически», которая встроена в Windows, хотя и медленнее.

Но если вы хотите печатать только чистый текст с простым форматированием, вам нужно отправить управляющие команды на ваш матричный принтер, который работает быстрее, чем графическая печать. У разных принтеров разные команды выхода.

Вот типичные управляющие команды (для epson): http://www.printfil.com/manualen/c5.htm

Это может помочь: https://web.archive.org/web/20051212193242/http://sacpcug.org:80/archives/0306/prc0603.html

То, что я делаю в VB6, - это печать на Универсальный / текстовый принтер, вы открываете PRN или LPT1 как дескриптор файла, затем печатаете управляющие команды на дескрипторе файла, все управляющие команды будут перенаправляется на любой принтер, подключенный к LPT1 или PRN. Вы можете сделать то же самое с C #, просто откройте PRN или LPT1 как файл, а затем распечатайте его.

Для добавления Универсальный / только текстовый принтер , Панель управления> Принтеры> Добавить принтер. На заводе-изготовителе выберите «Общий», затем на принтерах выберите «Только общий / текстовый».

Вы можете сделать то же самое (печать на Универсальный / только текст ) для принтеров Zebra, которые имеют свои собственные управляющие команды для печати штрих-кодов, что быстрее, чем позволить Windows печатать на нем графически.

4 голосов
/ 19 марта 2010

При печати на струйном или лазерном принтере вы обычно не используете встроенные шрифты принтера. Вы используете шрифты 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 или старый механизм пишущей машинки). С ними невозможно было создать пиксельную графику, за исключением печати многократных периодов и микро-продвижения печатающей головки и бумаги шириной / высотой периода вместо символа / строки текста соответственно (что обычно приводит к износу символа периода очень быстро, поэтому у многих из них были периоды, усиленные металлом, именно по этой причине).

0 голосов
/ 06 июля 2010

Хотя это не было в C #, я написал отчеты Access, в которых использовались собственные шрифты принтера Epson. Это было несколько лет назад - с использованием Windows XP - но когда принтер был выбран по умолчанию, можно было выбрать «родные» шрифты принтера с помощью средства выбора шрифтов.

Это было довольно аккуратно - я мог использовать любой шрифт, который мне нравился, для заголовков, которые печатались медленно. Затем я мог выбрать собственный шрифт принтера для строк подробностей, которые были быстрыми. Делая это таким образом, я должен был быть осторожным, чтобы все «нативные» шрифты с деталями шрифта имели точно такое же вертикальное выравнивание, в противном случае оно снова стало медленным.

0 голосов
/ 16 января 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...