سؤال

أحاول طباعة الكود الموسع صفحة 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 وتغيير رموز الأحرف الخاصة بك بدلاً من ذلك سيكون من الحكمة. طاولات الرسوم الهزلية في الجزء الخلفي من الدليل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top