Матричная печать в C #? - PullRequest
       66

Матричная печать в C #?

8 голосов
/ 29 октября 2008

Я пытаюсь распечатать на матричных принтерах Dot Matrix (различные модели) из C #, в настоящее время я использую Win32 API (вы можете найти множество примеров в Интернете) для отправки кодов escape прямо на принтер из моего C # приложение. Это прекрасно работает, но ...

Моя проблема в том, что я генерирую управляющие коды и не полагаюсь на систему печати Windows, распечатки не могут быть отправлены на какие-либо "обычные" принтеры или такие вещи, как драйверы печати PDF. (Это вызывает проблему, поскольку мы пытаемся использовать приложение на сервере терминалов 2008 с использованием Easy Print [на основе XPS])

Вопрос в следующем: Как можно распечатать отформатированные документы (счета на предварительно напечатанных стационарных) на матричных принтерах Dot Matrix (Epson, Oki и Panasonic ... различные модели) из C # без прямой печати, кодов сброса и т. Д.

** Просто чтобы уточнить, я пробую что-то вроде GDI + (System.Drawing.Printing), но проблема в том, что очень сложно заставить вещи выстраиваться в линию, как это делал старый код. (Старый код отправлял символы прямо на принтер в обход драйвера Windows.) Есть предложения, как можно улучшить вещи, чтобы они могли использовать GDI +, но при этом выстраиваться в линию, как это делал старый код?

Ответы [ 8 ]

10 голосов
/ 30 октября 2008

Вероятно, вам следует использовать инструмент отчетности для создания шаблонов, которые позволят вам или пользователям правильно расположить поля относительно предварительно напечатанных бланков.

Используя матричные принтеры, вы в основном должны работать в любом из двух режимов:

  • простой режим ввода текста текста строки / столбца, в котором вы отправляете escape-последовательности для управления небольшим количеством шрифтов, которые включены в аппаратное обеспечение принтера и должны управлять возвратом строки и т. Д.
  • графический вывод, при котором страница растрируется, а драйвер принтера просто управляет печатающей головкой и выводами для вывода точек.

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

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

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

Visual Studio поставляется с версией Crystal Reports, но существуют и другие, более совершенные системы отчетности (я использую, например, developer express ), некоторые из них даже бесплатны .

5 голосов
/ 30 октября 2008

Из моего опыта проще использовать два вида отчетов для одних и тех же данных:

  • требуется один отчет для матричных принтеров, использующих управляющие коды и все остальное, который сохраняется в текстовом файле и затем распечатывается различными способами (type file.txt > lpt1 или выбирается в коде принтер по умолчанию и используется NOTEPAD /P file.txt) - см эта страница для дополнительных методов печати.
  • еще один отчет для лазерных / струйных принтеров с использованием инструмента построителя отчетов (Crystal Reports, Диспетчер отчетов , RLIB или любой доступный)

Поскольку нередки случаи покупки правильного типа принтера для правильного типа отчета, этот подход имеет то преимущество, что позволяет клиенту выбрать: матричный принтер для текстовых отчетов в формате бумаги A3 / A4 (обычно для учета отдел) или лазерный / струйный принтер для графических отчетов.

4 голосов
/ 27 марта 2009

Сначала преобразуйте команды последовательности в символ, затем передайте на принтер

Пример шрифта Bold 27,69

String.Format ( "{0} {1}", Convert.ToChar (27), Convert.ToChar (69));

Возможно, немного короче, как:

String.Format ( "{0} {1}", (символ) (27), (символ) (69));

4 голосов
/ 23 февраля 2009

Я не знаю, как использовать Escape-последовательность в C #. Но у меня есть все Escape Sequence для универсального / текстового принтера. Надеюсь, это поможет.

Общая последовательность Escape печати 1) Установить межстрочный интервал а) 1/8 дюйма - 27,48 б) 1/6 дюйма - 27,50

2) Выберите качество черновика а) 27 120,0 / 27 120,48

3) Качество письма а) 27 120,1 / 27 120,49

4) Двойная высота а) 27,119, н я) п = 1 вкл ii) n = 0 выключено

5) Двунаправленная печать а) 27,85, н я) 0 - в обе стороны ii) 1 - в одну сторону

6) Увеличить пространство символов а) 27,32, н (увеличение на н / 12 дюймов)

7) Выберите жирный шрифт а) 27,69

8) Отмена полужирного шрифта а) 27,70

9) Выберите шрифт курсив а) 27,52

10) Отмена курсивного шрифта а) 27,53

11) Выбрать а) 10cpi 27,8 б) 12cpi 27,77 в) 15cpi 27,103 d) 18 cpi 27,103

12) Установить правильную маржу а) 27,81, н

13) Установить левое поле а) 27,108, n

14) Форм подачи а) 12

15) Конденсатная печать а) 0F вкл б) 12 выкл

16) Двойная печать а) 27,71

17) Отмена пробной печати а) 27,72

18) Под строкой а) 27,45,0 Выкл. б) 27,45,1 на

19) Двойная ширина а) 27,84,0 Выкл. б) 27,84,1 ПО

1 голос
/ 29 октября 2008

Посмотрите на пространство имен System.Drawing.Printing .

0 голосов
/ 10 августа 2015

Вы можете сослаться на это http://www.codeproject.com/Articles/29709/Line-Printer-Class-in-C надеюсь, помощь

0 голосов
/ 30 октября 2008

Кажется, что то, что я хотел бы сделать, невозможно.

Мой выбор для печати - неуправляемый, непосредственно для печати на принтере (с использованием winspool.drv), который позволяет мне делать с принтером все, что мне нравится, и позволяет легко выстраивать в очередь. Пример VB.NET Или Я могу использовать GDI + (System.Drawing.Printing), который сложно выстроить в ряд, но будет работать с матричными принтерами без точек, такими как XPS и PDF.

0 голосов
/ 29 октября 2008

Если на вашем принтере установлен драйвер, вы можете использовать обычную систему печати Windows. Большинство принтеров, в том числе POS, имеют работающие драйверы Windows. (Большинство точечно-матричных принтеров в любом случае совместимы с Epson.) Некоторые драйверы POS-принтеров также позволяют отправлять управляющие коды непосредственно на принтер (используя специальные шрифты); возможно, вам не нужен такой функционал.

Если это не так, вы можете добавить универсальный / текстовый принтер (драйвер) с помощью мастера установки принтера. После этого вы можете настроить для него определенные команды (escape-последовательности) - размер шрифта 10/12/17, включение / выключение полужирного шрифта, включение / выключение подчеркивания, запуск / остановку задания, подачу бумаги и выбор размера.

Я использую принтер Generic, связанный с портом FILE, для тестирования различных отчетов для принтеров POS - легко просмотреть текстовый файл, чтобы проверить числа в распечатке. Конечно, для форматирования необходим специальный драйвер принтера.

...