title: Zebra Printer C# code to print barcode label
body: <p>This is my *.prn file:</p>
  
  <pre>
  I8,A,001 Q0001,0
  q831
  rN
  S5
  D10
  ZT
  JF
  O
  R20,0
  f100
  N
  B775,188,2,1,2,6,160,B,"SM00020000"
  X0,199,1,0,200
  P1
  </pre>
  
  <p><code>SM00020000</code> being the barcode.</p>
  
  <pre><code>string s = "I8,A,001\n\n\nQ0001,0\nq831\nrN\nS5\nD10\nZT\nJF\nO\nR20,0\nf100\nN\nB775,188,2,1,2,6,160,B,\"SM00020000\",199,1,0,200\nP1\n";
  
  PrintDialog pd = new new PrintDialog();
  pd.PrinterSettings = new System.Drawing.Printing.
  pd.PrinterSettings.PrinterName = "ZDesigner GT800 (EPL)";
  RawPrinterHelper.SendStringToPrinter(pd.PrinterSettings.PrinterName, s);
  
  public static bool SendStringToPrinter(string szPrinterName, string szString)
  {
      IntPtr pBytes;
      Int32 dwCount;
      // How many characters are in the string?
      dwCount = szString.Length;
      // Assume that the printer is expecting ANSI text, and then convert
      // the string to ANSI text.
      pBytes = Marshal.StringToCoTaskMemAnsi(szString);
      // Send the converted ANSI string to the printer.
      SendBytesToPrinter(szPrinterName, pBytes, dwCount);
      Marshal.FreeCoTaskMem(pBytes);
      return true;
  }
  
  public static bool SendBytesToPrinter(string szPrinterName, IntPtr pBytes, Int32 dwCount)
  {
      Int32 dwError = 0, dwWritten = 0;
      IntPtr hPrinter = new IntPtr(0);
      DOCINFOA di = new DOCINFOA();
      bool bSuccess = false; // Assume failure unless you specifically succeed.
  
      di.pDocName = "My C#.NET RAW Document";
      di.pDataType = "RAW";
  
      // Open the printer.
      if (OpenPrinter(szPrinterName.Normalize(), out hPrinter, IntPtr.Zero))
      {
          // Start a document.
          if (StartDocPrinter(hPrinter, 1, di))
          {
              // Start a page.
              if (StartPagePrinter(hPrinter))
              {
                  // Write your bytes.
                  bSuccess = WritePrinter(hPrinter, pBytes, dwCount, out dwWritten);
                  EndPagePrinter(hPrinter);
  
              }
              EndDocPrinter(hPrinter);
          }
          ClosePrinter(hPrinter);
      }
      // If you did not succeed, GetLastError may give more information
      // about why not.
      if (bSuccess == false)
      {
          dwError = Marshal.GetLastWin32Error();
      }
      return bSuccess;
  }
  </code></pre>
  
  <p>This code is not helping me print my label. The document goes to the print queue but nothing happens after that. Although the printer is correctly configured and I have successfully printed with Zebra Designer.</p>
  
  <p>Also I'd like the above code such that it prints 3 labels in one row, since I have the media which has 3 stickers in one row. How can that be achieved?</p>
  
  <p>My printer model is ZDesigner GT800 (EPL).</p>