Frage

Ich versuche erweiterten Codepage 850 Zeichen mit ZPL II zu einem Zebra S4M zu drucken. Jedes Mal, wenn einer der erweiterten Zeichen I.E. ASCII-Wert> 127 wird verwendet, ich eine Box bekommen von Grautönen statt des tatsächlichen Wert variiert wird.

Ich versuche, zu drucken und ± ° (ALT + 0177 und ALT + 0176). Ich vermute, dass es das RawPrinterHelper ich zu verwenden versuchen (wie von MS heruntergeladen, und ein anderer von Codeproject) aber ich kann nicht sehen, wo die Zeichencodes falsch gehen.

Seltsam, aus dem Editor, den direkten Druck macht die richtigen Zeichen, das führt mich ist es ein Problem mit dem rohen Druckerhilfsklasse zu glauben.

Ich bin die Raw Drucker-Helper-Klasse mit so nicht gebunden, wenn es einem besseren Weg, es zu tun, ich bin mehr als glücklich, sie zu sehen.

SAMPLE ZPLII Ohne entkam Zeichen

^XA
^FO30,200^AD^FH,18,10^FD35 ± 2 ° ^FS
^FS
^XZ

Mit entkam Zeichen (versuchte sowohl Groß- und Kleinschreibung)

^XA
^FO30,200^AD^FH,18,10^FD35 _b0 2 _b1 ^FS
^FS
^XZ

Raw Drucker-Helper

[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);
    }
}

Ist-Fix von der akzeptierten Antwort wurde das Zeichen Internationalisierung (-Code ^ CI27 ) zu Codepage 1252.

^XA
^FO30,200^AD^CI27^FH,18,10^FD35 _b0 2 _b1 ^FS
^FS
^XZ
War es hilfreich?

Lösung

Ja, die schraffierten Kästchen diese Byte-Codes haben, in Codepage 1252 die ohne Zweifel ist die Standard-Codepage für den Drucker, 1252 ist die Windows-Codepage für Westeuropa und Amerika.

Sie müssen einen Befehl senden, um die Codepage 850. Geht man von

scroll top