using BBWY.Client.Helpers; using BBWY.Client.Models; using BBWY.Controls; using NPOI.SS.UserModel; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Printing; using System.IO; using System.Linq; using System.Printing; using System.Runtime.ConstrainedExecution; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Interop; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Media.Media3D; using System.Windows.Shapes; using System.Drawing.Printing; namespace BBWY.Client.Views.PackTask { /// /// PrintWindow.xaml 的交互逻辑 /// public partial class PrintWindow : BWindow { public PrintWindow() { InitializeComponent(); LoadPrints(); } /// /// 获取打印机名称 /// private void LoadPrints() { var printingNames = PrinterSettings.InstalledPrinters;//获取本机的打印机数据 int index = -1; int selectIndex = 0; foreach (string name in printingNames) { if (name == "Microsoft XPS Document Writer" || name == "Microsoft Print to PDF" || name == "Fax") { continue; } index++; if (name.Contains("Deli")) { selectIndex = index; } cbPrints.Items.Add(name); } if (cbPrints.Items.Count > selectIndex) { cbPrints.SelectedIndex = selectIndex; } } /// /// 加载预览打印数据 /// public void LoadData() { // PrintData data = new PrintData(); if (CertificateModel != null) { this.DataContext = CertificateModel; bar.Visibility = Visibility.Collapsed; cer.Visibility = Visibility.Visible; } if (BarCodeModel != null) { this.DataContext = BarCodeModel; cer.Visibility = Visibility.Collapsed; bar.Visibility = Visibility.Visible; } } public CertificateModel CertificateModel { get; set; } public BarCodeModel BarCodeModel { get; set; } private void BButton_Click(object sender, RoutedEventArgs e) { int printCount = 0; try { printCount = Convert.ToInt32(tbCount.Text); } catch { new TipsWindow("请输入打印份数", 1).ShowDialog(); return; } string printName = cbPrints.Text;//选择的要打印的打印机名称 Task.Factory.StartNew(() => { try { PrintDocument document = new PrintDocument(); document.PrinterSettings.PrinterName = printName;//使用打印机名称,指定特定的打印机进行打印。 //设置打印页面 //document.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("Custom", 236, 157); document.PrintPage += Document_PrintPage; document.PrinterSettings.Copies = (short)printCount;//打印份数 document.Print(); } catch (Exception ex) { App.Current.Dispatcher.Invoke(() => { new TipsWindow("打印失败").ShowDialog(); }); } }); } private void Document_PrintPage(object sender, PrintPageEventArgs args) { //RectangleF bounds = new RectangleF(0, 0, 236, 157); //args.Graphics.SetClip(bounds);//设置打印区域 //设置 打印纸张类型 //var paperSizes = args.PageSettings.PrinterSettings.PaperSizes; //foreach (System.Drawing.Printing.PaperSize item in paperSizes) //{ // if (item.Height==157) // { // args.PageSettings.PaperSize=item; // break; // } //} //var sss = args.PageSettings.PaperSize; //默认设置 打印类型 #if DEBUG //打印 纵向打印 会模糊 //args.PageSettings.PrinterSettings.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("Custom", 236, 157); //args.PageSettings.PrinterSettings.DefaultPageSettings.Landscape = true; Bitmap bitmap = new Bitmap(236,157); #endif Font font = new Font("宋体", 6, System.Drawing.FontStyle.Regular); if (BarCodeModel != null) { MyPrintHelper.PrintBarcode(ref args, BarCodeModel, font); } if (CertificateModel != null) { MyPrintHelper.PrintCertificate(ref args, CertificateModel, font); } } } public class PrintData { public CertificateModel CertificateModel { get; set; } public BarCodeModel BarCodeModel { get; set; } } }