2015-05-27 17 views
2

Мы только что перешли от принтеров с брачными лейблами к зебре, а брат sdk для C# - это своего рода meh, но он сделал то, что я хотел. В основном это дало мне возможность создать ярлык в дизайнере и прикрепить имена ссылок к текстовым файлам, файлам штрих-кодов и т. Д. Однако, глядя на зебра, я не могу найти способ сделать это. Мне не нравится, что вам нужно будет создавать ярлыки с помощью своего дизайнера, которому не хватает этой функции, или сделать это на 100% в C#, что мешает нашему дизайнеру перепроектировать ярлык позже по дороге, так как ярлыки для жесткого кодирования - это нет.Принтер этикеток Zebra C# SDK

Я смотрел на термопластику неодинамикой, но это дорого стоит для этой мелочи.

Есть ли решение, которое я пропустил? тонны и тонны googling и даже пытаясь понять как напечатать имеющиеся метки брата через C# к принтеру зебры. Это возможно (возможно), поскольку p-touch может это сделать, но я также думаю, что в sdk отсутствует эта функция, которая делает это невозможным в любом случае.

После просмотра брата sdk для некоторых дополнительных опций я заметил, что могу получить ярлык как bmp, можно ли его легко напечатать на принтере для этикеток зебры?

+1

Хотя большинство производителей этикеток-принтеров, похоже, предпочитают иметь собственный язык печати, все они также работают как обычный принтер. Так я пошел с принтерами, которые мы поставляем с нашим оборудованием. Вам нужно будет создавать все содержимое самостоятельно, но это дает вам много гибкости и не связывает вас с одним производителем дерьмовых этикеток. – Chris

+0

Вы можете сохранить свой код ZPL в простой текстовый файл, а затем использовать команду оболочки, чтобы переместить ее на LPT1. – Seb

+0

Я думаю, что он говорит, что их ярлыки не в ZPL, но что бы ни использовал Брат, это правильное предположение Makkesk8? – JWiley

ответ

2

Я добавлю источник ссылку позже, когда я нахожу его, но это, как я печатаю нашей Зебра как сейчас:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
     public class DOCINFOA 
     { 
      [MarshalAs(UnmanagedType.LPStr)] 
      public string pDocName; 
      [MarshalAs(UnmanagedType.LPStr)] 
      public string pOutputFile; 
      [MarshalAs(UnmanagedType.LPStr)] 
      public string pDataType; 
     } 
     [DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
     public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd); 

     [DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
     public static extern bool ClosePrinter(IntPtr hPrinter); 

     [DllImport("winspool.Drv", EntryPoint = "StartDocPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
     public static extern bool StartDocPrinter(IntPtr hPrinter, Int32 level, [In, MarshalAs(UnmanagedType.LPStruct)] DOCINFOA di); 

     [DllImport("winspool.Drv", EntryPoint = "EndDocPrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
     public static extern bool EndDocPrinter(IntPtr hPrinter); 

     [DllImport("winspool.Drv", EntryPoint = "StartPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
     public static extern bool StartPagePrinter(IntPtr hPrinter); 

     [DllImport("winspool.Drv", EntryPoint = "EndPagePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
     public static extern bool EndPagePrinter(IntPtr hPrinter); 

     [DllImport("winspool.Drv", EntryPoint = "WritePrinter", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
     public static extern bool WritePrinter(IntPtr hPrinter, IntPtr pBytes, Int32 dwCount, out Int32 dwWritten); 


public static bool SendStringToPrinter(String printerName, String dataString) 
     { 
      int dwCount = (dataString.Length + 1) * Marshal.SystemMaxDBCSCharSize; 

      // Assume that the printer is expecting ANSI text, and then convert 
      // the string to ANSI text. 
      IntPtr pBytes = Marshal.StringToCoTaskMemAnsi(dataString); 
      // Send the converted ANSI string to the printer. 
      SendPBytesToPrinter(printerName, pBytes, dwCount); 
      Marshal.FreeCoTaskMem(pBytes); 
      return true; 
     } 


     public static bool SendPBytesToPrinter(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 (bSuccess == false) 
      { 
       dwError = Marshal.GetLastWin32Error(); 
       //TODO: log error code 
      } 
      return bSuccess; 
     } 

Где dataString является ZPL интерпретируется принтером.

+0

Красивый код. Он работает через USB или TCP? – Seb

+1

Пока принтер отображается по названию, он будет работать через оба. – JWiley

+1

Ницца, я «краду» ваш код;) – Seb

0

Вы можете сохранить свой код ZPL в простой текстовый файл, а затем использовать команду оболочки, чтобы переместить ее на LPT1.

Если зебра подключен через сеть, самый простой способ/обходной путь заключается в использовании «NET USE lpt1: \ [ф] [Зебра]/настойчив: да

Вы можете использовать Zebra Designer легко создавать ZPL для вы используете «печать в файл функцию»

Смежные вопросы