Как напечатать экспоненциальный номер «м³» на принтере ESC / POS с C #? - PullRequest
1 голос
/ 29 мая 2019

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

if (!printer.IsOpen)
    printer.Open();

printer.WriteLine(string.Format("{0} m{1}", "2.34", Convert.ToChar(0xB3)));

printer.Close();

Когда я пытался отладить и просмотреть значение с помощью визуализатора текста, текст верен, что составляет «2,34 м³».Но когда дело доходит до печати, текст меняется на «2,34 м?», Где ожидаемый результат должен быть «2,34 м³».

Я пытался выяснить это уже несколько дней.Пожалуйста помоги.Спасибо.

Ответы [ 3 ]

0 голосов
/ 31 мая 2019

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

0 голосов
/ 06 июня 2019

Я недостаточно хорошо знаю C #, чтобы комментировать код в вашем вопросе, но абсолютно возможно напечатать символ ³ в ESC / POS, отправив "\x1B\x74\x02\xFC".

Вот изображение квитанции от Epson TM-T20:

2.43 m³

Я напечатал это, используя библиотеку PHP , которая понимает, как конвертировать UTF-8 в доступные кодовые страницы принтеров ESC / POS. Подобная библиотека существует для python , и вам было бы неплохо использовать эквивалент C #, если он существует!

<?php
require __DIR__ . '/vendor/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\FilePrintConnector;
use Mike42\Escpos\CapabilityProfile;

$connector = new FilePrintConnector("php://stdout");
$profile = CapabilityProfile::load("default");
$printer = new Printer($connector, $profile);

$printer -> text("2.43 m³\n");
$printer -> cut();
$printer -> close();

Это соответствует следующему hexdump.

$ php superscript-demo.php | hexdump -C
00000000  1b 40 32 2e 34 33 20 6d  1b 74 02 fc 0a 1d 56 41  |.@2.43 m.t....VA|
00000010  03                                                |.|
00000011

Все команды здесь:

  • ESC @ - вернуть настройки форматирования и кодировки символов к значениям по умолчанию.
  • ESC t 2 - выберите кодовую страницу 2.
  • LF - разрыв строки
  • ESC V 65 3 - команда обрезки

Волшебство здесь ESC t 2. Кодовая страница с номером 2 на принтерах Epson - это устаревшая кодовая страница 850 на принтерах Epson . Другие поставщики могут отличаться, но руководство для вашего принтера также показывает CP850 в том же положении.

Ваша кодовая страница по умолчанию (CP437) не содержит требуемого символа, в то время как на кодовой странице 850 ³ представлен 0xFC. После изменения кодовых страниц изменение будет активным, пока вы не перезагрузите принтер или не выполните команду ESC @.

.

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

0 голосов
/ 29 мая 2019

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

Если предположить, что "Superscript on" равен ESC 0x4e, а "Superscript off" равен ESC 0x4f, то ваш cde будет выглядеть так:

printer.WriteLine(string.Format("{0} m{1}3{2}", "2.34", "\x1b\x4e", "\x1b\x4f" );
...