ZPL II أحرف ممتدة
-
30-09-2019 - |
سؤال
أحاول طباعة الكود الموسع صفحة 850 حرفًا باستخدام ZPL II إلى Zebra S4M. كلما تم استخدام أحد الأحرف الممتدة ، يتم استخدام قيمة ASCII> 127 ، أحصل على علبة من ظلال رمادية مختلفة بدلاً من القيمة الفعلية.
أحاول طباعة ± و ° (ALT+0177 و ALT+0176). أظن أنه RAWPRINTERHELPER الذي أحاول استخدامه (كما تم تنزيله من MS ، والآخر من CODEPROJECT) ومع ذلك لا أستطيع أن أرى أين تخطئ رموز الأحرف.
بغرابة ، فإن الطباعة المباشرة من Notepad تجعل الشخصيات الصحيحة ، مما يقودني إلى الاعتقاد بأنها مشكلة في فئة المساعد الطابعة الخام.
أنا لست مرتبطًا باستخدام فئة مساعد الطابعة الخام ، لذا إذا كانت هناك طريقة أفضل للقيام بذلك ، يسعدني رؤيتها.
عينة zpliiدون فرار من الساحات
^XA
^FO30,200^AD^FH,18,10^FD35 ± 2 ° ^FS
^FS
^XZ
مع chars هرب (حاولت العلوية والسفلية على حد سواء)
^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 ) إلى رمز الصفحة 1252.
^XA
^FO30,200^AD^CI27^FH,18,10^FD35 _b0 2 _b1 ^FS
^FS
^XZ
المحلول
نعم ، تحتوي المربعات المظللة على رموز البايت هذه ، في الكود صفحة 1252. والتي لا شك في أن صفحة التعليمات البرمجية الافتراضية للطابعة ، 1252 هي صفحة رمز Windows لأوروبا الغربية والأمريكتين.
سيكون عليك إرسال أمر لتبديل صفحة التعليمات البرمجية إلى 850. انطلاقًا من الدليل, ، يتطلب ^CI تحديد مجموعة الأحرف 13.
الاحتفاظ بصفحة التعليمات البرمجية في 1252 وتغيير رموز الأحرف الخاصة بك بدلاً من ذلك سيكون من الحكمة. طاولات الرسوم الهزلية في الجزء الخلفي من الدليل.