печать на матричном принтере в .net

кто-нибудь может сказать мне код, как печатать документы на матричном принтере в приложении Windows С#.


person Community    schedule 16.01.2009    source источник


Ответы (4)


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

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

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

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

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

Чтобы добавить общий/только текстовый принтер, выберите Панель управления > Принтеры > Добавить принтер. Для производителя выберите Универсальный, затем для принтеров выберите Универсальный/Только текст.

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

person Michael Buen    schedule 16.01.2009
comment
это точечный матрик похож на термопринтер? - person gumuruh; 07.06.2020

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

Когда вы печатаете на старом матричном принтере, вы можете делать это таким образом, но это медленно. Каждая строка текста должна быть «построена» из пикселей, и часто строки текста не совпадают с проходами печатающей головки (особенно для шрифтов, намного больших или меньших, чем 12 пунктов).

Старый способ использования этих принтеров, как они и предполагались, заключался в отправке на принтер фактических ASCII-кодов текста. Отправьте число 65 (десятичное), и вы получите, например, заглавную (верхнюю) букву «А». Число 49 (десятичное) напечатает цифру «1», тогда как число 32 будет пробелом, 33 — восклицательным знаком («!») И так далее. Один байт = один символ. У матричного принтера был собственный встроенный шрифт, и он просматривал код ASCII в своем ПЗУ шрифтов и оттуда определял точное время, когда печатные провода должны были касаться страницы, когда именно эти буквы должны были быть напечатаны.

Используя коды ESCape, вы можете определить такие эффекты, как псевдожирный шрифт (по сути, два удара по букве, при этом вторая копия смещается вправо только на одну ширину точки), двойной широкий (нанесение ударов по каждому столбцу проводов дважды подряд для каждый раз, когда он обычно ударяется, таким образом удваивая ширину буквы), подчеркивание (ударяя по нижней печатной проволоке повсюду, независимо от того, требует ли форма буквы этого в этой точке или нет) и так далее.

Собственное ПЗУ принтера обрабатывало все эти механические детали, касающиеся печатных проводов и тому подобного. Все, что ваша программа должна была предоставить, это фактические коды ASCII текста (включая управляющие коды, такие как число 13 [Carriage Return aka CR] для возврата печатающей головки к левому полю [или, для двунаправленного принтера, подготовиться к печати следующая строка в порядке, обратном предыдущей строке], обычно за которым следует число 10 [перевод строки, также известное как LF], чтобы свернуть бумагу на одну строку вверх для подготовки к печати следующей строки).

Если вы хотели печатать причудливыми шрифтами, которых не было в принтере, или печатать графику, вам нужно было использовать код ESCape, чтобы перевести принтер в «графический режим», в котором вы в основном отправляли байты, биты которых указывали бы на запуск отдельных провода печатающей головки под непосредственным программным управлением, а не поиск формы символов в ПЗУ шрифтов принтера. Обычно это происходит при обычной печати из Windows с использованием драйвера для конкретного принтера.

Для гирляндных или других принтеров с фиксированными символами (например, шариковые механизмы типа IBM Selectric) код ASCII будет вращать колесо или шарик в нужное положение, а затем ударять по ленте и, таким образом, печатать букву. на странице или отправьте правый молоток вверх, чтобы ударить по ленте и, следовательно, по странице (TeleType или механизм старой пишущей машинки). С ними было невозможно делать пиксельную графику, кроме как путем печати повторяющихся точек и микроперемещения печатающей головки и бумаги на ширину / высоту точки вместо символа / строки текста соответственно (что обычно изнашивало символ точки). ромашки или шара очень быстро, поэтому у многих из них были усиленные металлом периоды именно по этой причине).

person Joel_MMCC    schedule 19.03.2010

Чем это отличается от печати на струйном или лазерном принтере?

MSDN: обзор печати

Предварительный просмотр и печать из приложения Windows Forms с пространством имен .NET Printing

person aku    schedule 16.01.2009
comment
Вы правы, конечно. Или мы могли бы интерпретировать этот вопрос как «У вас есть код для прямого управления функциями (конкретных) матричных принтеров из C#?». Викрам должен будет уточнить... - person peSHIr; 16.01.2009

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

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

person peter_mcc    schedule 06.07.2010