Матричная печать в C#?
Я пытаюсь печатать на матричные принтеры 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 ответов
Вам, вероятно, следует использовать инструмент отчетности для создания шаблонов, которые позволят вам или пользователям правильно расположить поля относительно предварительно напечатанных канцелярских товаров.
Используя матричные принтеры, вы должны работать в любом из двух режимов:
- простой режим ввода текста текста строки / столбца, в котором вы отправляете escape-последовательности для управления небольшим количеством шрифтов, которые включены в аппаратное обеспечение принтера и должны управлять возвратом строк и т. д.
- графический вывод, при котором страница растрируется, а драйвер принтера просто приводит в движение печатающую головку и контакты для вывода точек.
Первое использование в основном не рекомендуется в Windows, так как оно не предлагает много возможностей для управления выводом, и каждый принтер, имеющий свои собственные характеристики, становится громоздким и трудным для программного обеспечения прогнозировать и позиционировать вещи на странице (без WYSIWYG).
Второй просто использует графическую парадигму страницы, которая делает позиционирование текста и графики независимыми от реальных возможностей принтера.
При использовании предварительно напечатанных канцелярских товаров ваша задача правильно расположить данные на странице.
Выполнение этого вручную требует больших ресурсов, и создание макета в коде, безусловно, не рекомендуется, поскольку вы застрянете с кодом, который нужно изменить, если ваш принтер, формат страницы или печатные бланки изменятся.
Лучше всего просто использовать стандартную модель печати, предлагаемую.Net, и инструмент для создания отчетов, который позволяет вам определять модели и шаблоны, в которых будет располагаться правильный текст и графика, а затем извлекать их из кода.
Visual Studio поставляется с версией Crystal Reports, но есть и другие, более совершенные системы отчетности (я использую, например, разработчик Developer Express), некоторые из них даже бесплатны.
Исходя из моего опыта, проще использовать два вида отчетов для одних и тех же данных:
- один отчет для матричных принтеров с использованием управляющих кодов и всего остального необходим, который сохраняется в текстовом файле и затем распечатывается различными способами (
type file.txt > lpt1
или выбрав в коде принтер по умолчанию и используяNOTEPAD /P file.txt
) - см. эту страницу для большего количества методов печати. - другой отчет для лазерных / струйных принтеров с использованием инструмента построения отчетов (Crystal Reports, Report Manager, RLIB или любой другой доступный)
Поскольку нередки случаи покупки правильного типа принтера для правильного вида отчета, этот подход имеет преимущество, позволяя клиенту решать: матричный принтер для текстовых отчетов в формате бумаги A3/A4 (обычно для бухгалтерии) или лазерный / струйный принтер для графических отчетов.
Я не знаю, как использовать Escape-последовательность в C#. Но у меня есть все Escape Sequence для универсального / текстового принтера. Надеюсь, поможет.
Общая последовательность печати печати 1) Установить межстрочный интервал а) 1/8 дюйма - 27,48 б) 1/6 дюйма - 27,50
2) Выберите качество черновика a) 27 120,0 / 27 120,48
3) Качество письма a) 27 120,1 / 27 120,49
4) Двойная высота а) 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) Выберите жирный шрифт а) 27,69
8) Отмена полужирного шрифта а) 27,70
9) Выберите курсивный шрифт а) 27,52
10) Отмена курсивного шрифта а) 27,53
11) Выберите a) 10cpi 27,8 b) 12cpi 27,77 c) 15cpi 27,103 d) 18cpi 27,103
12) Установите правильную маржу а) 27,81, н
13) Установить левое поле а) 27,108, н
14) Форма подачи а) 12
15) Сжатая печать а) 0F Вкл. B) 12 Выкл.
16) Двойная штриховая печать а) 27,71
17) Отмена штриховой печати а) 27,72
18) Под линией а) 27,45,0 Выкл. Б) 27,45,1 Вкл.
19) Двойная ширина а) 27,84,0 выкл. Б) 27,84,1 вкл.
Сначала преобразуйте команды последовательности в символ, затем передайте на принтер
Пример жирного шрифта 27,69
String.Format("{0}{1}",Convert.ToChar(27),Convert.ToChar(69));
Возможно, немного короче, как:
String.Format("{0}{1}",(символ)(27),(символ)(69));
Похоже, что то, что я хотел бы сделать, невозможно.
Мой выбор для печати - неуправляемый, непосредственно к печати на принтере (с использованием winspool.drv), что позволяет мне делать с принтером все, что мне нравится, и позволяет легко выстраивать их в очередь. Пример VB.NET Или я могу использовать GDI+ (System.Drawing.Printing), который сложен для выравнивания, но будет работать с матричными принтерами без точек, такими как XPS и PDF.
Если на вашем принтере есть драйвер для установки, вы можете использовать обычную систему печати Windows. Большинство принтеров, в том числе POS, имеют работающие драйверы Windows. (Большинство точечно-матричных принтеров в любом случае совместимы с Epson.) Некоторые драйверы POS-принтеров также позволяют отправлять управляющие коды непосредственно на принтер (используя специальные шрифты); вероятно, вам не нужен такой функционал.
Если это не так, вы можете добавить универсальный / только текстовый принтер (драйвер) с помощью мастера установки принтера. Сделав это, вы можете настроить для него определенные команды (escape-последовательности) - размер шрифта 10/12/17, включение / выключение полужирного шрифта, включение / выключение подчеркивания, запуск / остановку задания, подачу бумаги и выбор размера.
Я использую принтер Generic, связанный с портом FILE, для тестирования различных отчетов для принтеров POS - легко просмотреть текстовый файл, чтобы проверить числа в распечатке. Конечно, для форматирования необходим определенный драйвер принтера.
Вы можете сослаться на это http://www.codeproject.com/Articles/29709/Line-Printer-Class-in-C надеюсь, что помощь