using BarcodeLib; using BBWY.Client.Extensions; using BBWY.Client.Models; using BBWY.Client.Models.FallWare; using BBWY.Client.Models.PackTask; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Printing; using System.IO; using System.Linq; using System.Net.Http; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Windows; using System.Windows.Media.Imaging; using WebSocketSharp; namespace BBWY.Client.Helpers { public class MyPrintHelper { public static void PrintBarcode(ref PrintPageEventArgs args, BarCodeModel barCode, Font font) { args.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; args.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; var sige = args.Graphics.VisibleClipBounds;// 宽:236 高:157 打印可视化区域 args.Graphics.TranslateTransform((sige.Width - 236) / 2, 0);//设置起始位置 //args.Graphics.DrawRectangle(new System.Drawing.Pen(System.Drawing.Brushes.Black), 0, 0, sige.Width, sige.Height);//画出条码编辑区域 args.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; args.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; switch (barCode.LabelModel) { case BarcodeLabelModel.标准模板: font = new Font("宋体", 8, System.Drawing.FontStyle.Regular); SetBar(barCode, ref args, font, 5); //SetBarStander(barCode, ref args, font); break; case BarcodeLabelModel.精简模板: //font = new Font("宋体", 10, System.Drawing.FontStyle.Regular); ////SetBar(barCode, ref args, font, 15); //SetBarSimplify(barCode, ref args, font); //break; case BarcodeLabelModel.无型号模板: font = new Font("宋体", 10, System.Drawing.FontStyle.Regular); SetBar(barCode, ref args, font, 7); break; default: break; } } private static void SetBar(BarCodeModel barCode, ref PrintPageEventArgs args, Font font, int heightSpace) { float topHeigth = 0;//与顶部的距离 string barcodeSku = $"POP{barCode.SkuId}"; Barcode barcode = new Barcode(); System.Drawing.Image img = barcode.Encode(TYPE.CODE128, barcodeSku, 500, 40); SizeF size = args.Graphics.MeasureString("品名", font); var sizeHeight = size.Height;//字体高度 topHeigth += 10; //switch (barCode.LabelModel) //{ // case BarcodeLabelModel.无型号模板: // case BarcodeLabelModel.标准模板: // args.Graphics.DrawString($"品牌: {barCode.Brand}", font, System.Drawing.Brushes.Black, new PointF(10, topHeigth)); // topHeigth += (heightSpace + sizeHeight); // break; // case BarcodeLabelModel.精简模板: // break; //} args.Graphics.DrawString($"品名: {barCode.BrandName}", font, System.Drawing.Brushes.Black, new PointF(10, topHeigth)); topHeigth += (heightSpace + sizeHeight); switch (barCode.LabelModel) { case BarcodeLabelModel.标准模板: args.Graphics.DrawString($"型号: {barCode.ProductNo}", font, System.Drawing.Brushes.Black, new PointF(10, topHeigth)); topHeigth += (heightSpace + sizeHeight); break; case BarcodeLabelModel.无型号模板: case BarcodeLabelModel.精简模板: break; default: break; } args.Graphics.DrawString($"规格: {barCode.SkuName}", font, System.Drawing.Brushes.Black, new PointF(10, topHeigth)); // g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; size = args.Graphics.MeasureString(barcodeSku, font); topHeigth += (heightSpace + sizeHeight); args.Graphics.DrawString($"店铺: {barCode.ShopName}", font, System.Drawing.Brushes.Black, new PointF(10, topHeigth)); topHeigth += (heightSpace + sizeHeight); args.Graphics.DrawImage(img, 1, topHeigth, 234, 50); topHeigth += (50 + 5); args.Graphics.DrawString(barcodeSku, font, System.Drawing.Brushes.Black, new PointF((236 - size.Width) / 2, topHeigth)); } /// /// 标准 /// /// /// /// private static void SetBarStander(BarCodeModel barCode, ref PrintPageEventArgs args, Font font) { float topHeigth = 0;//与顶部的距离 string barcodeSku = $"POP{barCode.SkuId}"; Barcode barcode = new Barcode(); System.Drawing.Image img = barcode.Encode(TYPE.CODE128, barcodeSku, 500, 40); SizeF size = args.Graphics.MeasureString(barCode.BrandName, font); var sizeHeight = size.Height;//字体高度 var heightSpace = 5;//间隔高度 topHeigth += 10; args.Graphics.DrawString($"品牌: {barCode.Brand}", font, System.Drawing.Brushes.Black, new PointF(10, topHeigth)); topHeigth += (heightSpace + sizeHeight); args.Graphics.DrawString($"品名: {barCode.BrandName}", font, System.Drawing.Brushes.Black, new PointF(10, topHeigth)); topHeigth += (heightSpace + sizeHeight); args.Graphics.DrawString($"型号: {barCode.ProductNo}", font, System.Drawing.Brushes.Black, new PointF(10, topHeigth)); topHeigth += (heightSpace + sizeHeight); args.Graphics.DrawString($"规格: {barCode.SkuName}", font, System.Drawing.Brushes.Black, new PointF(10, topHeigth)); // g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; size = args.Graphics.MeasureString(barcodeSku, font); topHeigth += (heightSpace + sizeHeight); args.Graphics.DrawImage(img, 1, topHeigth, 234, 50); topHeigth += (50 + 5); args.Graphics.DrawString(barcodeSku, font, System.Drawing.Brushes.Black, new PointF((236 - size.Width) / 2, topHeigth)); } /// /// 精简 /// /// /// /// private static void SetBarSimplify(BarCodeModel barCode, ref PrintPageEventArgs args, Font font) { string barcodeSku = $"POP{barCode.SkuId}"; Barcode barcode = new Barcode(); System.Drawing.Image img = barcode.Encode(TYPE.CODE128, barcodeSku, 500, 60); //args.Graphics.DrawString($"品名: {barCode.BrandName}", font, System.Drawing.Brushes.Black, new PointF(10, 10)); //args.Graphics.DrawString($"规格: {barCode.SkuName}", font, System.Drawing.Brushes.Black, new PointF(10, 40)); args.Graphics.DrawString($"规格: {barCode.SkuName}", font, System.Drawing.Brushes.Black, new PointF(10, 10)); args.Graphics.DrawString($"店铺: {barCode.ShopName}", font, System.Drawing.Brushes.Black, new PointF(10, 40)); // g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; SizeF size = args.Graphics.MeasureString(barcodeSku, font); args.Graphics.DrawString(barcodeSku, font, System.Drawing.Brushes.Black, new PointF((236 - size.Width) / 2, 130)); args.Graphics.DrawImage(img, 1, 68, 234, 60); } public static void PrintCertificate(ref PrintPageEventArgs args, CertificateModel certificate, Font font) { args.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; args.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; var sige = args.Graphics.VisibleClipBounds;// 宽:236 高:157 打印可视化区域 args.Graphics.TranslateTransform((sige.Width - 236) / 2, 0);//设置起始位置 args.Graphics.DrawRectangle(new System.Drawing.Pen(System.Drawing.Brushes.Black), 5, 5, sige.Width - 10, sige.Height - 10);//画出条码编辑区域 args.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; args.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; font = new Font("宋体", 6, System.Drawing.FontStyle.Regular); switch (certificate.LabelModel) { case CertificateLabelModel.标准无3c: case CertificateLabelModel.标准有3c: SetCerStander(ref args, certificate, font); break; case CertificateLabelModel.无型号: SetCerNoXingHao(ref args, certificate, font); break; case CertificateLabelModel.适用年龄: SetCerNoXingHao(ref args, certificate, font); break; default: break; } } private static void SetCerStander(ref PrintPageEventArgs args, CertificateModel certificate, Font font) { //#if DEBUG // Bitmap bitmap = new Bitmap(236, 157); // // Bitmap bitmap = new Bitmap(500, 500); // Graphics graphics = Graphics.FromImage(bitmap); // var sige = graphics.VisibleClipBounds;// 宽:236 高:157 打印可视化区域 // graphics.TranslateTransform((sige.Width - 236) / 2, 0);//设置起始位置 // graphics.DrawRectangle(new System.Drawing.Pen(System.Drawing.Brushes.Black), 5, 5, sige.Width - 10, sige.Height - 10);//画出条码编辑区域 // int bigJiange = 20;//合格证与品牌的高度差 // var heightSpace = 4;//所有行间隔高度 // if (!string.IsNullOrEmpty(certificate.ProduceDate)) // { // bigJiange = 10; heightSpace = 3; // } // int standerSpace = 1;//执行标准之间的 // if (certificate.IsLogo == 1)//含图标 // { // string appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); // string path = appPath + $"/Resources/Images/3c.png"; // Image image = Image.FromFile(path); // graphics.DrawImage(image, 190, 7, 28, 21); // graphics.DrawString(certificate.FactoryNumber, font, System.Drawing.Brushes.Black, 188, 28); // } // var fontBig = new Font("宋体", 14, System.Drawing.FontStyle.Regular); // string cerName = "合格证"; // SizeF bigSize = graphics.MeasureString(cerName, fontBig); // float verHeight = bigJiange + bigSize.Height; // graphics.DrawString(cerName, fontBig, System.Drawing.Brushes.Black, new PointF((236 - bigSize.Width) / 2, 10)); // graphics.DrawString($"品牌: {certificate.Brand}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); // if (!string.IsNullOrEmpty(certificate.ProductNo)) // graphics.DrawString($"型号: {certificate.ProductNo}", font, System.Drawing.Brushes.Black, new PointF(122, verHeight)); // var smallSize = graphics.MeasureString(certificate.Brand, font);//小字体高度 // verHeight += (smallSize.Height + heightSpace); // graphics.DrawString($"品名: {certificate.BrandName}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); // graphics.DrawString($"材质: {certificate.Shader}", font, System.Drawing.Brushes.Black, new PointF(122, verHeight)); // StringBuilder sb = new StringBuilder(); // var excutes = certificate.ExcuteStander.Split(new string[] { ",", "," }, StringSplitOptions.RemoveEmptyEntries); // int hangCount = excutes.Count() / 2 + excutes.Count() % 2;//获取行数 // for (int i = 0; i < excutes.Count(); i++) // { // if (i % 2 == 0 && i > 0)//间隔两个换行 // { // sb.Append("\n"); // } // sb.Append(excutes[i]).Append(" "); // } // sb.Remove(sb.Length - 3, 3); // var rows = sb.ToString().Split('\n'); // string excuteStander = "执行标准: "; // smallSize = graphics.MeasureString(excuteStander, font); // verHeight += (smallSize.Height + heightSpace); // graphics.DrawString($"执行标准: {rows[0]}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); // for (int i = 1; i < rows.Count(); i++) // { // verHeight += (smallSize.Height + standerSpace); // graphics.DrawString($"{rows[i]}", font, System.Drawing.Brushes.Black, new PointF(12 + smallSize.Width, verHeight)); // } // if (!string.IsNullOrEmpty(certificate.ProduceDate)) // { // verHeight += (smallSize.Height + heightSpace) - 3; // graphics.DrawString($"生产日期: {certificate.ProduceDate}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); // } // verHeight += (smallSize.Height + heightSpace); // RectangleF rect = new RectangleF(10, verHeight, 220, smallSize.Height * 2 + heightSpace); // var productStr = $"生产商: {certificate.ProductShop}"; // if (graphics.MeasureString(productStr, font).Width <= 220) // { // graphics.DrawString(productStr, font, System.Drawing.Brushes.Black, 10, verHeight); // verHeight += smallSize.Height + heightSpace; // } // else // { // graphics.DrawString(productStr, font, System.Drawing.Brushes.Black, rect); // verHeight += 2 * smallSize.Height + heightSpace; // } // var productShop = graphics.MeasureString("生产商", font); // var adress = graphics.MeasureString("地 址", font); // var rect1 = new RectangleF(10 + productShop.Width - adress.Width, verHeight - 2, 220, smallSize.Height * 3 + heightSpace); // graphics.DrawString($"地 址: {certificate.ProductAdress}", font, System.Drawing.Brushes.Black, rect1); // var applicationPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); // bitmap.Save($"{applicationPath}/{certificate.LabelModel}-{certificate.GoodsNumber}.jpg", ImageFormat.Png); int bigJiange = 20;//合格证与品牌的高度差 var heightSpace = 4;//所有行间隔高度 int standerSpace = 1;//执行标准之间的 if (!string.IsNullOrEmpty(certificate.ProduceDate)) { bigJiange = 10; heightSpace = 3; } if (certificate.IsLogo == 1)//含图标 { string appPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); string path = appPath + $"/Resources/Images/3c.png"; Image image = Image.FromFile(path); args.Graphics.DrawImage(image, 190, 7, 28, 21); args.Graphics.DrawString(certificate.FactoryNumber, font, System.Drawing.Brushes.Black, 188, 28); } var fontBig = new Font("宋体", 14, System.Drawing.FontStyle.Regular); string cerName = "合格证"; SizeF bigSize = args.Graphics.MeasureString(cerName, fontBig); float verHeight = bigJiange + bigSize.Height; args.Graphics.DrawString(cerName, fontBig, System.Drawing.Brushes.Black, new PointF((236 - bigSize.Width) / 2, 10)); args.Graphics.DrawString($"品牌: {certificate.Brand}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); if (!string.IsNullOrEmpty(certificate.ProductNo)) args.Graphics.DrawString($"型号: {certificate.ProductNo}", font, System.Drawing.Brushes.Black, new PointF(122, verHeight)); var smallSize = args.Graphics.MeasureString(certificate.Brand, font);//小字体高度 verHeight += (smallSize.Height + heightSpace); args.Graphics.DrawString($"品名: {certificate.BrandName}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); args.Graphics.DrawString($"材质: {certificate.Shader}", font, System.Drawing.Brushes.Black, new PointF(122, verHeight)); StringBuilder sb = new StringBuilder(); var excutes = certificate.ExcuteStander.Split(new string[] { ",", "," }, StringSplitOptions.RemoveEmptyEntries); int hangCount = excutes.Count() / 2 + excutes.Count() % 2;//获取行数 for (int i = 0; i < excutes.Count(); i++) { if (i % 2 == 0 && i > 0)//间隔两个换行 { sb.Append("\n"); } sb.Append(excutes[i]).Append(" "); } sb.Remove(sb.Length - 3, 3); var rows = sb.ToString().Split('\n'); string excuteStander = "执行标准: "; smallSize = args.Graphics.MeasureString(excuteStander, font); verHeight += (smallSize.Height + heightSpace); args.Graphics.DrawString($"执行标准: {rows[0]}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); for (int i = 1; i < rows.Count(); i++) { verHeight += (smallSize.Height + standerSpace) - 3; args.Graphics.DrawString($"{rows[i]}", font, System.Drawing.Brushes.Black, new PointF(10 + smallSize.Width, verHeight)); } if (!string.IsNullOrEmpty(certificate.ProduceDate)) { verHeight += (smallSize.Height + heightSpace); args.Graphics.DrawString($"生产日期: {certificate.ProduceDate}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); } verHeight += (smallSize.Height + heightSpace); RectangleF rect = new RectangleF(10, verHeight, 220, smallSize.Height * 2 + heightSpace); var productStr = $"生产商: {certificate.ProductShop}"; if (args.Graphics.MeasureString(productStr, font).Width <= 220) { args.Graphics.DrawString(productStr, font, System.Drawing.Brushes.Black, 10, verHeight); verHeight += smallSize.Height + heightSpace; } else { args.Graphics.DrawString(productStr, font, System.Drawing.Brushes.Black, rect); verHeight += 2 * smallSize.Height + heightSpace; } var productShop = args.Graphics.MeasureString("生产商", font); var adress = args.Graphics.MeasureString("地 址", font); var rect1 = new RectangleF(10 + productShop.Width - adress.Width, verHeight - 2, 220, smallSize.Height * 3 + heightSpace); args.Graphics.DrawString($"地 址: {certificate.ProductAdress}", font, System.Drawing.Brushes.Black, rect1); } private static void SetCerNoXingHao(ref PrintPageEventArgs args, CertificateModel certificate, Font font) { //Bitmap bitmap = new Bitmap(236, 157); //Graphics graphics = Graphics.FromImage(bitmap); //graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; //graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; //var sige = graphics.VisibleClipBounds;// 宽:236 高:157 打印可视化区域 //graphics.TranslateTransform((sige.Width - 236) / 2, 0);//设置起始位置 //graphics.DrawRectangle(new System.Drawing.Pen(System.Drawing.Brushes.Black), 5, 5, sige.Width - 10, sige.Height - 10);//画出条码编辑区域 //graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; //graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; //var twoWidth = graphics.MeasureString("适用", font); //var oneWidth = graphics.MeasureString("适", font); //int bigJiange = 20;//合格证与品牌的高度差 //if (!string.IsNullOrEmpty(certificate.ProduceDate)) bigJiange = 10; //var heightSpace = 4;//所有行间隔高度 //int standerSpace = 1;//执行标准之间的 //var fontBig = new Font("宋体", 14, System.Drawing.FontStyle.Regular); //string cerName = "合格证"; //SizeF bigSize = graphics.MeasureString(cerName, fontBig); //float verHeight = bigJiange + bigSize.Height; //graphics.DrawString(cerName, fontBig, System.Drawing.Brushes.Black, new PointF((236 - bigSize.Width) / 2, 10)); //graphics.DrawString($"品牌: {certificate.Brand}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); //graphics.DrawString($"品名: {certificate.BrandName}", font, System.Drawing.Brushes.Black, new PointF(122, verHeight)); //var smallSize = graphics.MeasureString(certificate.BrandName, font);//小字体高度 //verHeight += (smallSize.Height + heightSpace); //graphics.DrawString($"材质: {certificate.Shader}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); //switch (certificate.LabelModel) //{ // case CertificateLabelModel.标准无3c: // break; // case CertificateLabelModel.标准有3c: // break; // case CertificateLabelModel.无型号: // break; // case CertificateLabelModel.适用年龄: // graphics.DrawString($"适用年龄: {certificate.ApplyAge}", font, System.Drawing.Brushes.Black, new PointF(125 - twoWidth.Width, verHeight)); // break; // default: // break; //} ////graphics.DrawString($"材质: {certificate.Shader}", font, System.Drawing.Brushes.Black, new PointF(122, verHeight)); //StringBuilder sb = new StringBuilder(); //var excutes = certificate.ExcuteStander.Split(new string[] { ",", "," }, StringSplitOptions.RemoveEmptyEntries); //int hangCount = excutes.Count() / 2 + excutes.Count() % 2;//获取行数 //for (int i = 0; i < excutes.Count(); i++) //{ // if (i % 2 == 0 && i > 0)//间隔两个换行 // { // sb.Append("\n"); // } // sb.Append(excutes[i]).Append(" "); //} //sb.Remove(sb.Length - 3, 3); //var rows = sb.ToString().Split('\n'); //string excuteStander = "执行标准: "; //smallSize = graphics.MeasureString(excuteStander, font); //verHeight += (smallSize.Height + heightSpace); //graphics.DrawString($"执行标准: {rows[0]}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); //for (int i = 1; i < rows.Count(); i++) //{ // verHeight += (smallSize.Height + standerSpace); // graphics.DrawString($"{rows[i]}", font, System.Drawing.Brushes.Black, new PointF(12 + smallSize.Width, verHeight)); //} //if (!string.IsNullOrEmpty(certificate.ProduceDate)) //{ // verHeight += (smallSize.Height + heightSpace)-3; // graphics.DrawString($"生产日期: {certificate.ProduceDate}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); //} //verHeight += (smallSize.Height + heightSpace); //RectangleF rect = new RectangleF(10, verHeight, 220, smallSize.Height * 2 + heightSpace); //var productStr = $"生产商: {certificate.ProductShop}"; //if (graphics.MeasureString(productStr, font).Width <= 220) //{ // graphics.DrawString(productStr, font, System.Drawing.Brushes.Black, 10, verHeight); // verHeight += smallSize.Height + heightSpace; //} //else //{ // graphics.DrawString(productStr, font, System.Drawing.Brushes.Black, rect); // verHeight += 2 * smallSize.Height + heightSpace; //} //var productShop = graphics.MeasureString("生产商", font); //var adress = graphics.MeasureString("地 址", font); //var rect1 = new RectangleF(10 + productShop.Width - adress.Width, verHeight - 2, 220, smallSize.Height * 3 + heightSpace); //graphics.DrawString($"地 址: {certificate.ProductAdress}", font, System.Drawing.Brushes.Black, rect1); //var applicationPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); //bitmap.Save($"{applicationPath}/{certificate.LabelModel}-{certificate.GoodsNumber}.jpg", ImageFormat.Png); int bigJiange = 20;//合格证与品牌的高度差 var heightSpace = 4;//所有行间隔高度 int standerSpace = 1;//执行标准之间的 if (!string.IsNullOrEmpty(certificate.ProduceDate)) bigJiange = 10; var fontBig = new Font("宋体", 14, System.Drawing.FontStyle.Regular); string cerName = "合格证"; SizeF bigSize = args.Graphics.MeasureString(cerName, fontBig); float verHeight = bigJiange + bigSize.Height; args.Graphics.DrawString(cerName, fontBig, System.Drawing.Brushes.Black, new PointF((236 - bigSize.Width) / 2, 10)); args.Graphics.DrawString($"品牌: {certificate.Brand}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); args.Graphics.DrawString($"品名: {certificate.BrandName}", font, System.Drawing.Brushes.Black, new PointF(122, verHeight)); var smallSize = args.Graphics.MeasureString(certificate.BrandName, font);//小字体高度 verHeight += (smallSize.Height + heightSpace); args.Graphics.DrawString($"材质: {certificate.Shader}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); switch (certificate.LabelModel) { case CertificateLabelModel.标准无3c: break; case CertificateLabelModel.标准有3c: break; case CertificateLabelModel.无型号: break; case CertificateLabelModel.适用年龄: var twoWidth = args.Graphics.MeasureString("适用", font); args.Graphics.DrawString($"适用年龄: {certificate.ApplyAge}", font, System.Drawing.Brushes.Black, new PointF(122 - twoWidth.Width, verHeight)); break; default: break; } //args.Graphics.DrawString($"材质: {certificate.Shader}", font, System.Drawing.Brushes.Black, new PointF(122, verHeight)); StringBuilder sb = new StringBuilder(); var excutes = certificate.ExcuteStander.Split(new string[] { ",", "," }, StringSplitOptions.RemoveEmptyEntries); int hangCount = excutes.Count() / 2 + excutes.Count() % 2;//获取行数 for (int i = 0; i < excutes.Count(); i++) { if (i % 2 == 0 && i > 0)//间隔两个换行 { sb.Append("\n"); } sb.Append(excutes[i]).Append(" "); } sb.Remove(sb.Length - 3, 3); var rows = sb.ToString().Split('\n'); string excuteStander = "执行标准: "; smallSize = args.Graphics.MeasureString(excuteStander, font); verHeight += (smallSize.Height + heightSpace); args.Graphics.DrawString($"执行标准: {rows[0]}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); for (int i = 1; i < rows.Count(); i++) { verHeight += (smallSize.Height + standerSpace); args.Graphics.DrawString($"{rows[i]}", font, System.Drawing.Brushes.Black, new PointF(10 + smallSize.Width, verHeight)); } if (!string.IsNullOrEmpty(certificate.ProduceDate)) { verHeight += (smallSize.Height + heightSpace) - 3; args.Graphics.DrawString($"生产日期: {certificate.ProduceDate}", font, System.Drawing.Brushes.Black, new PointF(10, verHeight)); } verHeight += (smallSize.Height + heightSpace); RectangleF rect = new RectangleF(10, verHeight, 220, smallSize.Height * 2 + heightSpace); var productStr = $"生产商: {certificate.ProductShop}"; if (args.Graphics.MeasureString(productStr, font).Width <= 220) { args.Graphics.DrawString(productStr, font, System.Drawing.Brushes.Black, 10, verHeight); verHeight += smallSize.Height + heightSpace; } else { args.Graphics.DrawString(productStr, font, System.Drawing.Brushes.Black, rect); verHeight += 2 * smallSize.Height + heightSpace; } var productShop = args.Graphics.MeasureString("生产商", font); var adress = args.Graphics.MeasureString("地 址", font); var rect1 = new RectangleF(10 + productShop.Width - adress.Width, verHeight - 2, 220, smallSize.Height * 3 + heightSpace); args.Graphics.DrawString($"地 址: {certificate.ProductAdress}", font, System.Drawing.Brushes.Black, rect1); } public static void SaveImage(PrintPageEventArgs args) { args.Graphics.Save(); // args.Graphics //Bitmap bitmap2 = new Bitmap(236, 157); //Graphics graphics2 = Graphics.FromImage(bitmap2); //graphics2 = args.Graphics.Copy(); //bitmap2.Save("image.jpg", ImageFormat.Jpeg); } /// /// 字符串生成条形码 图片 /// /// /// /// /// public static BitmapImage GetBarcodeImage(string printStr, int width, int height) { Bitmap image = new Bitmap(width, height); try { Graphics graphics2 = Graphics.FromImage(image); Barcode barcode = new Barcode(); System.Drawing.Image img = barcode.Encode(TYPE.CODE128, printStr, 500, 60); graphics2.DrawImage(img, 0, 0, width, height); } catch { MessageBox.Show($"生成条码失败,不支持格式: {printStr}"); } return bitmapToBitmapImage(image); } /// /// 字符串生成条形码 图片 /// /// /// /// /// public static BitmapImage GetBarcodeImageV2(string printStr, int width, int height) { Bitmap image = new Bitmap(width, height); try { Graphics graphics2 = Graphics.FromImage(image); Barcode barcode = new Barcode(); System.Drawing.Image img = barcode.Encode(TYPE.CODE128, printStr, width, height); graphics2.DrawImage(img, 0, 0, width, height); } catch { MessageBox.Show($"生成条码失败,不支持格式: {printStr}"); } return bitmapToBitmapImage(image); } static BitmapImage bitmapToBitmapImage(Bitmap bitmap) { using (var stream = new MemoryStream()) { bitmap.Save(stream, ImageFormat.Png); stream.Position = 0; BitmapImage reslut = new BitmapImage(); reslut.BeginInit(); reslut.CacheOption = BitmapCacheOption.OnLoad; reslut.StreamSource = stream; reslut.EndInit(); reslut.Freeze(); return reslut; } } /// /// 打印京东箱唛 /// public static void PrintJDBoxWareData(JDWareBoxModel jDWareBoxModel, string printName) { } /// ///设置默认打印机 /// /// public static void SetDefaultPrint(string printName) { SetDefaultPrinter(printName); } public static void PrintPackDetail(PackTaskModel model,ref PrintPageEventArgs args, Font font) { args.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; args.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; var sige = args.Graphics.VisibleClipBounds;// 宽:283 高:511 打印可视化区域 args.Graphics.TranslateTransform(0, 0);//设置起始位置 args.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; args.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; args.Graphics.DrawImage(LoadImage(model.ItemList[0].Logo.Replace("80x80","200x200")), 10, 20, 120, 120); } private static Image LoadImage(string imageUrl) { try { using (HttpClient client = new HttpClient()) { // 发送 HTTP 请求并获取图片数据 var uri = new Uri(Uri.EscapeUriString(imageUrl)); byte[] imageData = client.GetByteArrayAsync(uri).Result; return imageData.ByteToImage(); } } catch (Exception ex) { // 处理加载图片失败的异常 Console.WriteLine("加载图片失败:" + ex.Message); } return null; } /// /// 调用win api将指定名称的打印机设置为默认打印机 /// /// /// [DllImport("winspool.drv")] public static extern bool SetDefaultPrinter(string Name); } }