Точечно-матричная печать на C #?

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

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

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

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


person Dale    schedule 29.10.2008    source источник
comment
Не могли бы вы дать нам ссылки на примеры для печати на точечных принтерах.   -  person Jitesh Patil    schedule 11.06.2010


Ответы (8)


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

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

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

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

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

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

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

person Renaud Bompuis    schedule 30.10.2008
comment
Спасибо, я не уверен, что это решит мою проблему, но это, вероятно, лучший ответ / решение, которое у меня было до сих пор. Также я не знал о FYIReporting. - person Dale; 30.10.2008

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

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

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

person alexandrul    schedule 30.10.2008

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

Стандартная последовательность выхода при печати 1) Установите межстрочный интервал a) 1/8 дюйма - 27,48 b) 1/6 дюйма - 27,50

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

3) Качество букв а) 27,120,1 / 27,120,49

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

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

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

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

8) Отменить жирный шрифт a) 27,70

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

10) Отменить курсив а) 27,53

11) Выберите a) 10 точек на дюйм 27,8 b) 12 точек на дюйм 27,77 c) 15 точек на дюйм 27,103 d) 18 точек на дюйм 27,103

12) Установите правое поле а) 27,81, n

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

14) Подача формы а) 12

15) Сжатая печать a) 0F вкл. B) 12 выкл.

16) Печать с двойным ударом а) 27,71

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

18) Под строкой a) 27,45,0 Off b) 27,45,1 On

19) Двойная ширина a) 27,84,0 выкл. Б) 27,84,1 вкл.

person Community    schedule 23.02.2009

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

Пример полужирного шрифта 27,69

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

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

string.Format ("{0} {1}", (char) (27), (char) (69));

person Community    schedule 27.03.2009

Взгляните на System.Drawing.Printing пространство имен.

person Tim Robinson    schedule 29.10.2008

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

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

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

person Arvo    schedule 29.10.2008
comment
Я пытаюсь это ... используя материал для печати GDI + в C # (System.Drawing.Printing), но проблема в том, что это все еще не то же самое (так хорошо), как отправка текста прямо на принтер ... Например, что шрифт мне нужно использовать? - person Dale; 30.10.2008
comment
Я думаю, что это правильный ответ: вы не хотите настраивать таргетинг только на один принтер, вы хотите настроить таргетинг на них всех, поэтому вам лучше печатать, как это делают все в наши дни, вместо того, чтобы просто отправлять символы на линейный принтер ( LPT). Таким образом, ваш принтер становится графическим устройством. - person Dave Van den Eynde; 30.10.2008
comment
Я думаю, что драйвер текстового принтера - ваш лучший вариант. Вы также должны учитывать скорость, печать в графическом режиме на матричном принтере намного медленнее, чем с использованием escape-кодов. Обратной стороной является несовместимость с графическими принтерами, но с заранее напечатанными формами использование другого принтера не очень полезно. - person Glenner003; 30.10.2008

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

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

person Dale    schedule 30.10.2008

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

person IlPADlI    schedule 10.08.2015