using BarcodeLib; using BBWY.Client.APIServices; using BBWY.Client.ViewModels; using BBWY.Client.ViewModels.PackTask; using BBWY.Controls; using Org.BouncyCastle.Asn1.Ocsp; using System; using System.Collections.Generic; using System.IO; using System.Printing; using System.Reflection; using System.Runtime.InteropServices.WindowsRuntime; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace BBWY.Client.Views.PackTask { /// /// ServiceWindow.xaml 的交互逻辑 /// public partial class ServiceWindow : BWindow { public ServiceWindow() { InitializeComponent(); } private void BButton_Click(object sender, RoutedEventArgs e) { var localPrintServer = new LocalPrintServer(); string printName = cbPrintName.Text.Trim(); if (string.IsNullOrEmpty(printName)) { MessageBox.Show("选择打印机"); return; } var printQueue = localPrintServer.GetPrintQueue(printName); if (printQueue.IsInError) { MessageBox.Show("打印机处于错误状态"); return; } //Print(this.printArea, cbPrintName.Text, "打印任务",1); this.printArea.Arrange(new Rect(new Point(0, 0), new Size(printArea.ActualWidth, printArea.ActualHeight))); PrintDialog printDialog = new PrintDialog(); //设置纸张大小 var pageWidth = (int)Math.Ceiling(printDialog.PrintableAreaWidth); var pageHeight = (int)Math.Ceiling(printDialog.PrintableAreaHeight); printDialog.PrintTicket.PageMediaSize = new PageMediaSize(pageWidth, pageHeight); printDialog.PrintVisual(this.printArea, "打印任务"); var applicationPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string printNames = System.IO.Path.Combine(applicationPath, "printName.init"); File.WriteAllText(printNames, cbPrintName.Text); } /// /// 打印 /// /// 流文档 /// 打印机名称 /// 打印描述 /// 打印个数 public static void Print(Visual document, string printer, string description, int copyCount) { var localPrintServer = new LocalPrintServer(); var printQueue = localPrintServer.GetPrintQueue(printer); if (printQueue.IsInError) { throw new Exception("打印机处于错误状态"); } var printDialog = new PrintDialog { PrintQueue = printQueue, //打印队列 PrintTicket = { CopyCount = copyCount } //打印个数 }; //设置纸张大小 var pageWidth = (int)Math.Ceiling(printDialog.PrintableAreaWidth); //小标签:114 var pageHeight = (int)Math.Ceiling(printDialog.PrintableAreaHeight); //小标签:227 printDialog.PrintTicket.PageMediaSize = new PageMediaSize(pageWidth, pageHeight); //设置纸张边距 var paperSize = GetPaperSize(printer); //小标签:118*246 //var offsetX = (int)Math.Ceiling((paperSize.Width - pageWidth) / 2f); //var offsetY = (int)Math.Ceiling((paperSize.Height - pageHeight) / 2f); //document.PagePadding = new Thickness(offsetX, offsetY, offsetX, offsetY); //打印 var paginator = ((IDocumentPaginatorSource)document).DocumentPaginator; printDialog.PrintDocument(paginator, description); var applicationPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string printNames = System.IO.Path.Combine(applicationPath, "printName.init"); File.WriteAllText(printNames, printer); } private static object GetPaperSize(string printer) { return null; } public interface IDocumentRenderer { void Render(FlowDocument doc, object data); } public class CommonDocumentRenderer : IDocumentRenderer { public void Render(FlowDocument doc, object data) { var model = data as PrintModel; if (model == null) { throw new ArgumentException("data is not PrintModel"); } var type = typeof(PrintModel); var properties = type.GetProperties(); foreach (var property in properties) { //文本赋值 if (doc.FindName(property.Name) is TextBlock textBlock) { textBlock.Text = property.GetValue(model)?.ToString(); } } } } public class PrintModel { /// /// 批号 /// public string BatchNumber { get; set; } /// /// 订单号 /// public string OrderNumber { get; set; } /// /// 物料代码 /// public string MaterialNumber { get; set; } } } }