using PdfSharp.Drawing; using PdfSharp.Pdf; using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.PixelFormats; using WMS.Info; using WMS.Util; using ZXing; using ZXing.Common; using ZXing.QrCode; namespace WMS.Core.ServiceCore.FeiXu { public class FxBaseBarCodeCore { /// /// 获取列表数据 /// /// public IEnumerable GetList(string keyword) { try { return SysDbCore.GetDbCtx().Queryable().WhereIF(!keyword.IsEmpty(), it => it.F_barCode.Contains(keyword)).ToList(); } catch (Exception ex) { throw ex; } } /// /// 获取分页数据 /// /// public IEnumerable GetPageList(string queryJson, Pagination pagination) { try { var db = SysDbCore.GetDbCtx().Queryable(); int count = 0; var queryParam = queryJson.ToJObject(); //单据日期 if (!queryParam["Btime"].IsEmpty() && !queryParam["Etime"].IsEmpty()) { db.Where(ord => ord.F_addTime >= queryParam["Btime"].ToDate() && ord.F_addTime <= queryParam["Etime"].ToDate()); } if (!queryParam["keyword"].IsEmpty()) { string matNo = queryParam["keyword"].ToString(); db.Where(ord => ord.F_barCode.Contains(matNo)); } if (!queryParam["F_addUserNo"].IsEmpty()) { string userNo = queryParam["trayNo"].ToString(); db.Where(ord => ord.F_addUserNo.Contains(userNo)); } if (!queryParam["F_barType"].IsEmpty()) { int barType = FuncStr.NullToInt(queryParam["F_barType"]); db.Where(ord => ord.F_barType == barType); } List list = null; if (pagination.sord.ToUpper() == "ASC") { list = db.OrderBy(pagination.sidx).ToPageList(pagination.page, pagination.rows, ref count); } else { string orderstr = pagination.sidx + " desc"; list = db.OrderBy(orderstr).ToPageList(pagination.page, pagination.rows, ref count); } pagination.records = count; return list; } catch (Exception ex) { throw ex; } } public void PrintBarCode(List lstBaseCode, LoginUserInfo loginInfo) { using (var ctx = SysDbCore.GetDbCtx()) { lstBaseCode.ForEach(code => { code.F_printNumber += 1; code.F_printTime = DateTime.Now; code.F_printUserNo = loginInfo.UserNo; }); ctx.Updateable(lstBaseCode).UpdateColumns(it => new { it.F_printNumber, it.F_printTime, it.F_printUserNo }).WhereColumns(it => it.F_no).ExecuteCommand(); } } public string CreatePrintBarCodePDF(List lstBaseCode, string path) { int Resolution = 300;//300 dpi high resolution of the barcode image var ssdocument = new PdfDocument(); //Aspose.Pdf.Document pdfDoc = new Aspose.Pdf.Document(); foreach (var item in lstBaseCode) { var sspage = ssdocument.AddPage(); if (item.F_barType == 1) { //BarcodeGenerator generator = new BarcodeGenerator(EncodeTypes.Code39Standard, item.F_barCode); //generator.Parameters.Resolution = Resolution;//set the barcode image resolution //var ssimage = generator.GenerateBarCodeImage(); //MemoryStream imageStream = new MemoryStream(); //generator.Save(imageStream, BarCodeImageFormat.Png); //imageStream.Position = 0; //var ximage = PdfSharp.Drawing.XImage.FromStream(imageStream); //DrawBarcodeImageFull(sspage, ximage); var writer = new ZXing.ImageSharp.BarcodeWriter(); writer.Format = BarcodeFormat.CODE_128; QrCodeEncodingOptions options = new QrCodeEncodingOptions(); options.DisableECI = true; //设置内容编码 options.CharacterSet = "UTF-8"; //设置二维码的宽度和高度 options.Width = 750; options.Height = 400; //设置二维码的边距,单位不是固定像素 options.Margin = 1; writer.Options = options; //var ms = new MemoryStream(); //using (var image = writer.Write(item.F_barCode)) //{ // image.SaveAsJpeg(ms);//保存于流 //} var imagesharp = writer.WriteAsImageSharp(item.F_barCode); var ms = new MemoryStream(); imagesharp.Save(ms, new PngEncoder()); ms.Position = 0;//设置位置 var ximage = PdfSharp.Drawing.XImage.FromStream(ms); DrawQrCodeImageFull(sspage, ximage); } else { var writer = new ZXing.ImageSharp.BarcodeWriter(); writer.Format = BarcodeFormat.QR_CODE; QrCodeEncodingOptions options = new QrCodeEncodingOptions(); options.DisableECI = true; //设置内容编码 options.CharacterSet = "UTF-8"; //设置二维码的宽度和高度 options.Width = 500; options.Height = 500; //设置二维码的边距,单位不是固定像素 options.Margin = 1; writer.Options = options; //var ms = new MemoryStream(); //using (var image = writer.Write(item.F_barCode)) //{ // image.SaveAsJpeg(ms);//保存于流 //} var imagesharp = writer.WriteAsImageSharp(item.F_barCode); var ms = new MemoryStream(); imagesharp.Save(ms, new PngEncoder()); ms.Position = 0;//设置位置 var ximage = PdfSharp.Drawing.XImage.FromStream(ms); DrawQrCodeImageFull(sspage, ximage); } } var dirPath = $@"DataFiles\{DateTime.Now.Year}\{DateTime.Now.Month}\{DateTime.Now.Day}\"; DirFileUtil.CreateDir(@"wwwroot\"+dirPath); var filename = $"{DateTime.Now.Ticks}.pdf"; var xxpath = $"{path}wwwroot\\{dirPath}{filename}"; if (System.IO.File.Exists(xxpath)) System.IO.File.Delete(xxpath); ssdocument.Save(xxpath); return @"\" + dirPath + filename; //using (var ctx = SysDbCore.GetDbCtx()) //{ // lstBaseCode.ForEach(code => // { // code.F_printNumber += 1; // code.F_printTime = DateTime.Now; // code.F_printUserNo = loginInfo.UserNo; // }); // ctx.Updateable(lstBaseCode).UpdateColumns(it => new { it.F_printNumber, it.F_printTime, it.F_printUserNo }).WhereColumns(it => it.F_no).ExecuteCommand(); //} } public byte[] GenerateBarcode(string text) { var writer = new ZXing.ImageSharp.BarcodeWriter() { Format = BarcodeFormat.CODE_128, Options = new EncodingOptions { Height = 500, Width =500 } }; var bitmap = writer.Write(text); using var stream = new MemoryStream(); //bitmap.Save(stream, ImageFormat.Png); return stream.ToArray(); } /// /// Draws image to pdf page /// /// private static void DrawBarcodeImageFull(PdfPage page, XImage image) { page.Width = image.PixelWidth; page.Height = image.PixelHeight + 800; var gfx = XGraphics.FromPdfPage(page); //System.Drawing.Rectangle imageRect = new System.Drawing.Rectangle(leftBarcodePosition, topBarcodePosition, (image.Width * 72) / Resolution, (image.Height * 72) / Resolution); gfx.DrawImage(image, (image.PixelWidth - 20) / 3, 20, 300, (image.PixelHeight * 72) / 200); } /// /// Draws image to pdf page /// /// private static void DrawQrCodeImageFull(PdfPage page, XImage image) { page.Width = image.PixelWidth + 600; page.Height = image.PixelHeight + 500; var gfx = XGraphics.FromPdfPage(page); //System.Drawing.Rectangle imageRect = new System.Drawing.Rectangle(leftBarcodePosition, topBarcodePosition, (image.Width * 72) / Resolution, (image.Height * 72) / Resolution); gfx.DrawImage(image, (image.PixelWidth - 20), 20, (image.PixelWidth * 72) / 200, (image.PixelHeight * 72) / 200); } /// /// 生成条码 /// /// public void generateBarCode(BarCodeRequest req, LoginUserInfo loginInfo) { try { using (var ctx = SysDbCore.GetDbCtx()) { List lstBarCode = new List(); for (int i = req.F_code; i < req.F_maxNum; i++) { string barCode = $"{req.F_prefix}{i.ToString().PadLeft(req.F_length - req.F_prefix.Length - req.F_suffix.Length, req.F_replenish)}{req.F_suffix}"; lstBarCode.Add(new BASE_BARCODE { F_addTime = DateTime.Now, F_addUserNo = loginInfo.AppDeviceNo, F_barCode = barCode, F_barType = req.F_barType }); } ctx.Insertable(lstBarCode).ExecuteCommand(); } } catch (Exception ex) { throw ex; } } } }