/// <summary> /// Prints a single label. /// </summary> /// <param name="printerIpAddress">The printer ip address.</param> /// <param name="label">The label.</param> /// <param name="mergeFields">The merge fields.</param> /// <returns></returns> public static string PrintLabel(string printerIpAddress, string label, Dictionary <string, string> mergeFields = null) { var message = string.Empty; if (mergeFields == null) { mergeFields = new Dictionary <string, string>(); } var socket = ZebraPrint.OpenSocket(printerIpAddress); string printContent = ZebraPrint.MergeLabelFields(label, mergeFields); if (socket.Connected) { ZebraPrint.Print(printContent, socket); } else { message = "NOTE: Could not connect to printer!"; } // Close the socket if (socket != null && socket.Connected) { socket.Shutdown(SocketShutdown.Both); socket.Close(); } return(message); }
/// <summary> /// Prints the labels. /// </summary> /// <param name="labels">The labels.</param> /// <returns></returns> public static List <string> PrintLabels(List <CheckInLabel> labels) { var messages = new List <string>(); Socket socket = null; string currentIp = string.Empty; foreach (var label in labels .OrderBy(l => l.PersonId) .ThenBy(l => l.Order)) { var labelCache = KioskLabel.Get(label.FileGuid); if (labelCache != null) { if (!string.IsNullOrWhiteSpace(label.PrinterAddress)) { if (label.PrinterAddress != currentIp) { if (socket != null && socket.Connected) { socket.Shutdown(SocketShutdown.Both); socket.Close(); } socket = ZebraPrint.OpenSocket(label.PrinterAddress); } string printContent = ZebraPrint.MergeLabelFields(labelCache.FileContent, label.MergeFields); if (socket.Connected) { ZebraPrint.Print(printContent, socket); } else { messages.Add("NOTE: Could not connect to printer!"); } } } } // Close the socket if (socket != null && socket.Connected) { socket.Shutdown(SocketShutdown.Both); socket.Close(); } return(messages); }
/// <summary> /// Prints the labels. /// </summary> /// <param name="labels">The labels.</param> /// <returns></returns> public static List <string> PrintLabels(List <CheckInLabel> labels) { var messages = new List <string>(); Socket socket = null; string currentIp = string.Empty; bool hasPrinterCutter = PrinterHasCutter(labels); int labelCount = 0; foreach (var label in labels.OrderBy(l => l.PersonId).ThenBy(l => l.Order)) { labelCount++; var labelCache = KioskLabel.Get(label.FileGuid); if (labelCache != null) { if (!string.IsNullOrWhiteSpace(label.PrinterAddress)) { if (label.PrinterAddress != currentIp) { if (socket != null && socket.Connected) { socket.Shutdown(SocketShutdown.Both); socket.Close(); } socket = ZebraPrint.OpenSocket(label.PrinterAddress); } string printContent = ZebraPrint.MergeLabelFields(labelCache.FileContent, label.MergeFields).TrimEnd(); // If the "enable label cutting" feature is enabled, then we are going to // control which mode the printer is in. In this case, we will remove any // tear-mode (^MMT) commands from the content and add the cut-mode (^MMC). if (hasPrinterCutter) { printContent = printContent.Replace("^MMT", string.Empty); // Here we are forcing the printer into cut mode (because // we don't know if it has been put into cut-mode already) even // though we might be suppressing the cut below. This is correct. printContent = printContent.ReplaceIfEndsWith("^XZ", "^MMC^XZ"); // If it's not the last label or a "ROCK_CUT" label, then inject // a suppress back-feed (^XB) command which will also suppress the cut. if (!(labelCount == labels.Count() || printContent.Contains("ROCK_CUT"))) { printContent = printContent.ReplaceIfEndsWith("^XZ", "^XB^XZ"); } } if (socket.Connected) { ZebraPrint.Print(printContent, socket); } else { messages.Add("NOTE: Could not connect to printer!"); } } } } // Close the socket if (socket != null && socket.Connected) { socket.Shutdown(SocketShutdown.Both); socket.Close(); } return(messages); }