Страницы

Поиск по вопросам

Показаны сообщения с ярлыком принтер. Показать все сообщения
Показаны сообщения с ярлыком принтер. Показать все сообщения

четверг, 23 января 2020 г.

Печать на русском. Принтер TG2480H. VS2013

#cpp #visual_studio #visual_cpp #принтер


Всем привет! Нужна ваша помощь 

Уже 4 дня как я пытаюсь напечатать текст на русском языке но все четно.
В принтере используется протокол ESC/POS. Работает через компорт. С горем пополам
я нашел класс-обвертку для компорта и научился отправлять команды. И все бы хорошо,
но как только дело дошло до русского языка - работа встала. Перечитав протокол я наткнулся
на команду "Set charecter code table", что дает возможность выбирать кодировки в самом
принтере для правильного отображения языков. Одним из параметров была кодировка РС866,
которая и указывает на кириллицу. При подключении этой кодировки должен был заработать
русский, но на печати снова появились кракозяблики. Открыв таблицу СР866 я увидел,
что эти кракозяблики являются частью таблицы. Взяв коды букв из этой таблицы и отправив
их на печать я все таки получил русский язык. А если взять и сравнить коды, например
букв 'A', то разница между ними будет - 64. (код 'A' С++ = 192, 'A'CP866 = 128). Интересно
то, что при использовании кодировки СР866 для консоли (setConsoleCP, setConsoleCPOut)
отображается нормальный русский текст, а при выводе на принтер получаем кракозяблики.

Подскажите, может нужно как-то еще обработать текст? Почему кодировки не совпадают?
    


Ответы

Ответ 1



Кодовая таблица, используемая «в C++» определяется кодировкой файлов исходных кодов. Скорее всего, Visual Studio сохраняет эти файлы с использованием Windows 1251. Следовательно: либо укажите Visual Studio использовать кодировку CP866, либо укажите принтеру использовать Windows 1251.

Ответ 2



Просто после main() напиши setlocale(LC_ALL, "Russian");

суббота, 4 января 2020 г.

Как из приложения отправить что-либо на принтер?

#c_sharp #winforms #печать #принтер


Как из консольного приложения или приложения WinForms отправить что-либо на принтер?
    


Ответы

Ответ 1



Минимально необходимо для печати: using System.Drawing.Printing; using System.Drawing; void Print() { PrintDocument printDoc = new PrintDocument(); printDoc.PrintPage += PrintPageHandler; printDoc.Print(); } void PrintPageHandler(object sender, PrintPageEventArgs e) { //Замените на e.Graphics.DrawImage или любую другую логику e.Graphics.DrawString("Привет", new Font("Arial", 14), Brushes.Black, 0, 0); } при этом печать будет на дефолтном принтере. PrintDialog позволяет выбрать принтер и настроить некоторые параметры PrintDocument через диалоговое окно, но за печать отвечает именно PrintDocument. Расширим пример для использования PrintDialog: PrintDocument printDoc = new PrintDocument(); printDoc.PrintPage += PrintPageHandler; PrintDialog printDialog = new PrintDialog(); printDialog.Document = printDoc; if (printDialog.ShowDialog() == DialogResult.OK) printDialog.Document.Print(); Убираем всплывающие окошки, если в них нет необходимости: printDoc.PrintController = new StandardPrintController(); По аналогии с добавлением PrintDialog, можно добавить PageSetupDialog и PrintPreviewDialog последовательно передавая им объект PrintDocument.

вторник, 23 апреля 2019 г.

Как из приложения отправить что-либо на принтер?

Как из консольного приложения или приложения WinForms отправить что-либо на принтер?


Ответ

Минимально необходимо для печати:
using System.Drawing.Printing; using System.Drawing;
void Print() { PrintDocument printDoc = new PrintDocument(); printDoc.PrintPage += PrintPageHandler; printDoc.Print(); }
void PrintPageHandler(object sender, PrintPageEventArgs e) { //Замените на e.Graphics.DrawImage или любую другую логику e.Graphics.DrawString("Привет", new Font("Arial", 14), Brushes.Black, 0, 0); }
при этом печать будет на дефолтном принтере. PrintDialog позволяет выбрать принтер и настроить некоторые параметры PrintDocument через диалоговое окно, но за печать отвечает именно PrintDocument
Расширим пример для использования PrintDialog
PrintDocument printDoc = new PrintDocument(); printDoc.PrintPage += PrintPageHandler; PrintDialog printDialog = new PrintDialog(); printDialog.Document = printDoc; if (printDialog.ShowDialog() == DialogResult.OK) printDialog.Document.Print();
Убираем всплывающие окошки, если в них нет необходимости:
printDoc.PrintController = new StandardPrintController();
По аналогии с добавлением PrintDialog, можно добавить PageSetupDialog и PrintPreviewDialog последовательно передавая им объект PrintDocument