ZPL II Удлиненные персонажи
-
30-09-2019 - |
Вопрос
Я пытаюсь напечатать расширенный код Page 850 символов, используя ZPL II на Zebra S4M. Всякий раз, когда используется одно из расширенных персонажей, т.е. значение ASCII> 127, я получаю коробку изменяющихся оттенков серого вместо фактического значения.
Я пытаюсь распечатать ± и ° (ALT + 0177 и ALT + 0176). Я подозреваю, что его RawPrinterHelper я пытаюсь использовать (как загружено из MS, а другой из CodeProject) Однако я не могу видеть, где коды символов идут не так.
Странно, печатание прямо из блокнота оказывает правильные персонажи, что приводит меня к верить, что это проблема с классом Helper Hear Printer.
Я не привязан к использованию класса Helper Hear Printer, поэтому, если есть лучший способ сделать это, я более чем рад видеть их.
Образец zpliiБез сбежавших символов
^XA
^FO30,200^AD^FH,18,10^FD35 ± 2 ° ^FS
^FS
^XZ
С сбежавшим символом (попробовал как верхний, так и нижний регистр)
^XA
^FO30,200^AD^FH,18,10^FD35 _b0 2 _b1 ^FS
^FS
^XZ
Сырой принтер помощник
[StructLayout(LayoutKind.Sequential)]
public struct DOCINFO
{
[MarshalAs(UnmanagedType.LPWStr)]
public string printerDocumentName;
[MarshalAs(UnmanagedType.LPWStr)]
public string pOutputFile;
[MarshalAs(UnmanagedType.LPWStr)]
public string printerDocumentDataType;
}
public class RawPrinter
{
[
DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
public static extern long OpenPrinter(string pPrinterName, ref IntPtr phPrinter, int pDefault);
[
DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = false,
CallingConvention = CallingConvention.StdCall)]
public static extern long StartDocPrinter(IntPtr hPrinter, int Level, ref DOCINFO pDocInfo);
[
DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern long StartPagePrinter(IntPtr hPrinter);
[
DllImport("winspool.drv", CharSet = CharSet.Ansi, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern long WritePrinter(IntPtr hPrinter, string data, int buf, ref int pcWritten);
[
DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern long EndPagePrinter(IntPtr hPrinter);
[
DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern long EndDocPrinter(IntPtr hPrinter);
[
DllImport("winspool.drv", CharSet = CharSet.Unicode, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
public static extern long ClosePrinter(IntPtr hPrinter);
public static void SendToPrinter(string printerJobName, string rawStringToSendToThePrinter,
string printerNameAsDescribedByPrintManager)
{
IntPtr handleForTheOpenPrinter = new IntPtr();
DOCINFO documentInformation = new DOCINFO();
int printerBytesWritten = 0;
documentInformation.printerDocumentName = printerJobName;
documentInformation.printerDocumentDataType = "RAW";
OpenPrinter(printerNameAsDescribedByPrintManager, ref handleForTheOpenPrinter, 0);
StartDocPrinter(handleForTheOpenPrinter, 1, ref documentInformation);
StartPagePrinter(handleForTheOpenPrinter);
WritePrinter(handleForTheOpenPrinter, rawStringToSendToThePrinter, rawStringToSendToThePrinter.Length,
ref printerBytesWritten);
EndPagePrinter(handleForTheOpenPrinter);
EndDocPrinter(handleForTheOpenPrinter);
ClosePrinter(handleForTheOpenPrinter);
}
}
Фактическое исправление из принятого ответа Установите информацию о характере (код ^ CI27. ) к кодированию Page 1252.
^XA
^FO30,200^AD^CI27^FH,18,10^FD35 _b0 2 _b1 ^FS
^FS
^XZ
Решение
Да, затененные коробки имеют эти байтовые коды, в коде Page 1252. Несомненно, является страница кода по умолчанию для принтера, 1252 - это страница кода Windows для Западной Европы и Америки.
Вам придется отправить команду для переключения кода Page на 850. Судя по руководство, Для этого требуется ^ CI для выбора набора символов 13.
Сохраняя кодовую страницу на 1252 и изменение ваших кодов персонажей, вместо этого будет мудрый. Таблицы глифа находятся в задней части руководства.