WPF应用中自定义Zebra标签打印机打印参数的实现方法
解决方案
要在不修改打印机默认参数的前提下,自定义打印的Darkness、旋转角度和纸张尺寸,你需要基于打印机的默认PrintTicket创建副本,修改所需参数后再传入打印对话框。以下是修改后的完整代码及说明:
修改后的代码
private async void DirectPrint() { await Task.Delay(250); string printerName = "ZDesigner GC420d"; PrintDialog printDialog = new PrintDialog(); PrintServer printServer = new PrintServer(); PrintQueueCollection printQueues = printServer.GetPrintQueues(); PrintQueue printQueue = printQueues.FirstOrDefault(pq => pq.Name.Contains(printerName)); if (printQueue != null) { DrawingVisual visual = new DrawingVisual(); using (DrawingContext dc = visual.RenderOpen()) { System.Windows.Size size = new System.Windows.Size(PrintLayout.ActualWidth, PrintLayout.ActualHeight); PrintLayout.Measure(size); PrintLayout.Arrange(new Rect(new System.Windows.Point(0, 0), size)); VisualBrush brush = new VisualBrush(PrintLayout); dc.DrawRectangle(brush, null, new Rect(new System.Windows.Point(0, 0), size)); } // 克隆默认打印票证,避免修改打印机全局默认设置 PrintTicket printTicket = printQueue.DefaultPrintTicket.Clone(); // 1. 设置打印内容旋转180度 printTicket.PageOrientation = PageOrientation.Rotate180; // 2. 设置纸张尺寸为3×1英寸(单位:百分之一英寸) // 若旋转后尺寸适配异常,可交换Width和Height值(改为100, 300) printTicket.PageMediaSize = new PageMediaSize(PageMediaSizeName.Custom, 300, 100); // 3. 设置Zebra打印机的Darkness浓度为15 XmlNamespaceManager namespaceManager = new XmlNamespaceManager(new NameTable()); namespaceManager.AddNamespace("zebra", "http://schemas.zebra.com/ecosystem/printing/2011/02/printticket"); PrintTicketParameterDefinition darknessParamDef = printTicket.GetParameterDefinition("Darkness", "zebra"); if (darknessParamDef != null) { printTicket.SetParameter("Darkness", "zebra", "15"); } // 应用自定义参数并执行打印 printDialog.PrintTicket = printTicket; printDialog.PrintQueue = printQueue; printDialog.PrintVisual(visual, "Label"); } }
关键修改说明
- 克隆PrintTicket:使用
Clone()方法创建默认票证的独立副本,确保修改仅作用于当前打印任务,不会影响打印机的全局默认设置。 - 旋转180度:直接设置
PageOrientation为Rotate180,这是WPF打印系统的标准枚举值,兼容多数支持旋转的打印机。 - 自定义纸张尺寸:通过
PageMediaSize指定自定义尺寸,单位为百分之一英寸,3×1英寸对应数值300和100。若打印后尺寸不符,可交换两个数值适配旋转后的方向。 - 设置Darkness浓度:Zebra打印机的浓度参数属于厂商自定义扩展,需通过指定Zebra的命名空间来获取和设置参数值。如果此方式不生效,可尝试直接修改PrintTicket的XML内容,或使用Zebra官方SDK进行更精准的参数控制。
内容的提问来源于stack exchange,提问作者jjansen315
相关产品推荐
相关产品推荐

