From ac7829ab6c23fa332e4418ac522b72cfce9b9846 Mon Sep 17 00:00:00 2001 From: "qianhao.xu" Date: Wed, 18 Dec 2024 15:06:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=82=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../appsettings.Development.json | 2 +- DOAN.Admin.WebApi/appsettings.Production.json | 11 +- DOAN.Service/DOAN.Service.csproj | 1 + .../MES/Product/ProWorkorderService.cs | 90 ++++++++-------- Infrastructure/DOAN.Infrastructure.csproj | 3 +- Infrastructure/Helper/PrintHelper.cs | 100 ++++++++++-------- DOANAdmin.sln => 北泽阀门MES.sln | 0 7 files changed, 114 insertions(+), 93 deletions(-) rename DOANAdmin.sln => 北泽阀门MES.sln (100%) diff --git a/DOAN.Admin.WebApi/appsettings.Development.json b/DOAN.Admin.WebApi/appsettings.Development.json index aa6b563..eeb17f1 100644 --- a/DOAN.Admin.WebApi/appsettings.Development.json +++ b/DOAN.Admin.WebApi/appsettings.Development.json @@ -22,7 +22,7 @@ "urls": "http://0.0.0.0:8888", //项目启动url,如果改动端口前端对应devServer也需要进行修改 "corsUrls": [ "http://localhost:8887", "http://localhost:8886", "http://localhost:9090", "http://localhost:8080" ], //跨域地址(前端启动项目,前后端分离单独部署需要设置),多个用","隔开 "Upload": { - "rootDirectory": "D:/MES/file", + "rootDirectory": "F:/MES/file", "uploadUrl": "http://172.18.32.1:8888", //本地存储资源访问路径 "localSavePath": "", //本地上传默认文件存储目录 wwwroot "maxSize": 30, //上传文件大小限制 15M diff --git a/DOAN.Admin.WebApi/appsettings.Production.json b/DOAN.Admin.WebApi/appsettings.Production.json index db12d60..b2c95fa 100644 --- a/DOAN.Admin.WebApi/appsettings.Production.json +++ b/DOAN.Admin.WebApi/appsettings.Production.json @@ -17,15 +17,16 @@ "IsAutoCloseConnection": true, "DbName": "bzfm_mes" //代码生成默认连接数据库,Oracle库是实例的名称 }, - "ShowDbLog": false, //是否打印db日志 - "urls": "http://0.0.0.0:8888", //项目启动url,如果改动端口前端对应devServer也需要进行修改 + "ShowDbLog": true, //是否打印db日志 + "urls": "http://*.*.*.*:8888", //项目启动url,如果改动端口前端对应devServer也需要进行修改 "corsUrls": [ "http://localhost:8887", "http://localhost:8886", "http://localhost:9090", "http://localhost:8080" ], //跨域地址(前端启动项目,前后端分离单独部署需要设置),多个用","隔开 "Upload": { - "rootDirectory": "D:/MES/file", - "uploadUrl": "http://127.0.0.1:7000", //本地存储资源访问路径 + "rootDirectory": "D:/mes/file", + "uploadUrl": "http://192.168.1.106:8888", //本地存储资源访问路径 "localSavePath": "", //本地上传默认文件存储目录 wwwroot+localSavePath "maxSize": 15, //上传文件大小限制 15M - "notAllowedExt": [ ".bat", ".exe", ".jar", ".js" ] + "notAllowedExt": [ ".bat", ".exe", ".jar", ".js" ], + "requestLimitSize": 1024 } } \ No newline at end of file diff --git a/DOAN.Service/DOAN.Service.csproj b/DOAN.Service/DOAN.Service.csproj index 6816838..0bea15a 100644 --- a/DOAN.Service/DOAN.Service.csproj +++ b/DOAN.Service/DOAN.Service.csproj @@ -10,6 +10,7 @@ + diff --git a/DOAN.Service/MES/Product/ProWorkorderService.cs b/DOAN.Service/MES/Product/ProWorkorderService.cs index c92ad14..3c90683 100644 --- a/DOAN.Service/MES/Product/ProWorkorderService.cs +++ b/DOAN.Service/MES/Product/ProWorkorderService.cs @@ -1319,60 +1319,64 @@ namespace DOAN.Service.MES.product var ms = new MemoryStream(); Settings.License = LicenseType.Community; Settings.CheckIfAllTextGlyphsAreAvailable = false; - var document = QuestPDF.Fluent.Document.Create(container => + await Task.Run(() => { - int PageWidth = 40 * 10; - int PageHeight = 30 * 10; - for (int i = 0; i < dataList.Count(); i++) + var document = QuestPDF.Fluent.Document.Create(container => { - byte[] imageBytes = PrintHelper.CreateBarCode(dataList[i].Workorder, PageWidth * 3, PageHeight); - container.Page(page => + int PageWidth = 40 * 10; + int PageHeight = 30 * 10; + for (int i = 0; i < dataList.Count(); i++) { - // 设置页面大小为A4,默认有页边距 - //page.Size(new PageSize(40*10,30*10)); // 移除默认页边距或设置自定义边距 - - page.Size(PageWidth, PageHeight); - page.DefaultTextStyle(TextStyle.Default.FontSize(16*2-5)); - //page.DefaultTextStyle(TextStyle.Default.FontSize(1)); - page.Content().Column(column => + byte[] imageBytes = PrintHelper.CreateQcCode(dataList[i].Workorder, PageHeight * 40 + 100, PageHeight * 20); + container.Page(page => { - column.Item().Table(table => + // 设置页面大小为A4,默认有页边距 + //page.Size(new PageSize(40*10,30*10)); // 移除默认页边距或设置自定义边距 + + page.Size(PageWidth, PageHeight); + page.DefaultTextStyle(TextStyle.Default.FontSize(10 * 2 + 2)); + //page.DefaultTextStyle(TextStyle.Default.FontSize(1)); + page.Content().Column(column => { - // 动态计算列宽,减去必要的边距 - float columnWidth = (PageWidth) / 8; - - table.ColumnsDefinition(columns => + column.Item().Table(table => { + // 动态计算列宽,减去必要的边距 + float columnWidth = (PageWidth) / 8; + + table.ColumnsDefinition(columns => + { + for (int j = 0; j < 8; j++) + columns.ConstantColumn(columnWidth); + }); + + // 创建一个单元格跨越所有列,用于放置图片 + table.Cell().ColumnSpan(8).Height(PageHeight / 14 * 8).Image(imageBytes); + + + // 剩余内容... + // 注意:确保剩余内容的高度不超过剩余的页面空间 + // 这里只是一个简单的例子,实际应用中你可能需要更复杂的逻辑来计算剩余可用空间 + + table.Cell().ColumnSpan(2).Border(1).MinHeight(PageHeight / 7).AlignLeft().Padding(1).Text("编号"); + table.Cell().ColumnSpan(6).Border(1).MinHeight(PageHeight / 14).AlignLeft().Padding(1).Text(dataList[i].Workorder); + table.Cell().ColumnSpan(2).Border(1).MinHeight(PageHeight / 14).AlignLeft().Padding(1).Text("炉号"); + table.Cell().ColumnSpan(6).Border(1).MinHeight(PageHeight / 14).AlignLeft().Padding(1).Text(dataList[i].StoveCode); + table.Cell().ColumnSpan(2).Border(1).MinHeight(PageHeight / 14).AlignLeft().Padding(1).Text("数量"); + table.Cell().ColumnSpan(6).Border(1).MinHeight(PageHeight / 14).AlignLeft().Padding(1).Text(dataList[i].PlanNum); for (int j = 0; j < 8; j++) - columns.ConstantColumn(columnWidth); + { + table.Cell().Border(1).MinHeight(PageHeight / 14).AlignCenter().Text($"[{j + 1}]"); + } + }); - - // 创建一个单元格跨越所有列,用于放置图片 - table.Cell().ColumnSpan(8).Image(imageBytes); - table.Cell().ColumnSpan(8).MinHeight(PageHeight / 7/4); - - // 剩余内容... - // 注意:确保剩余内容的高度不超过剩余的页面空间 - // 这里只是一个简单的例子,实际应用中你可能需要更复杂的逻辑来计算剩余可用空间 - - table.Cell().ColumnSpan(2).Border(1).MinHeight(PageHeight/7).AlignLeft().Padding(1).Text("编号"); - table.Cell().ColumnSpan(6).Border(1).MinHeight(PageHeight/7).AlignLeft().Padding(1).Text(dataList[i].Workorder); - table.Cell().ColumnSpan(2).Border(1).MinHeight(PageHeight/7).AlignLeft().Padding(1).Text("炉号"); - table.Cell().ColumnSpan(6).Border(1).MinHeight(PageHeight/7).AlignLeft().Padding(1).Text(dataList[i].StoveCode); - table.Cell().ColumnSpan(2).Border(1).MinHeight(PageHeight/7).AlignLeft().Padding(1).Text("数量"); - table.Cell().ColumnSpan(6).Border(1).MinHeight(PageHeight/7).AlignLeft().Padding(1).Text(dataList[i].PlanNum); - for (int j = 0; j< 8; j++) - { - table.Cell().Border(1).MinHeight(PageHeight/7).AlignCenter().Text($"[{j+1}]"); - } - }); }); - }); - } + } + }); + document.GeneratePdf(ms); + ms.Seek(0, SeekOrigin.Begin); + }); - document.GeneratePdf(ms); - ms.Seek(0, SeekOrigin.Begin); var fileName = $"工单({DateTime.Now.ToString("yyyyMMdd")}).pdf"; return new(fileName, ms); } diff --git a/Infrastructure/DOAN.Infrastructure.csproj b/Infrastructure/DOAN.Infrastructure.csproj index 2810148..c1485ba 100644 --- a/Infrastructure/DOAN.Infrastructure.csproj +++ b/Infrastructure/DOAN.Infrastructure.csproj @@ -14,7 +14,7 @@ - + @@ -23,7 +23,6 @@ - diff --git a/Infrastructure/Helper/PrintHelper.cs b/Infrastructure/Helper/PrintHelper.cs index 9d98ff1..9f02149 100644 --- a/Infrastructure/Helper/PrintHelper.cs +++ b/Infrastructure/Helper/PrintHelper.cs @@ -1,11 +1,11 @@ -using System.Drawing; -using System.Drawing.Imaging; -using System.DrawingCore; -using System.DrawingCore.Imaging; +using Microsoft.AspNetCore.Hosting.Server; +using System; +using System.IO; using ZXing; using ZXing.Common; - +using ZXing.QrCode; +//using ZXing.ZKWeb.System.Drawing; namespace DOAN.Infrastructure.Helper; @@ -19,37 +19,38 @@ public class PrintHelper /// /// /// - public static byte[] CreateBarCode(string message, int width, int height) - { - if (string.IsNullOrWhiteSpace(message)) - { - return null; - } - var w = new ZXing.OneD.Code128Writer(); - BitMatrix b = w.encode(message, BarcodeFormat.CODE_128, width, height); - var zzb = new ZXing.ZKWeb.BarcodeWriter(); - zzb.Options = new EncodingOptions() - { - Margin = 0, - PureBarcode = false - }; + //public static byte[] CreateBarCode(string message, int width, int height) + //{ + // if (string.IsNullOrWhiteSpace(message)) + // { + // return null; + // } + // var w = new ZXing.OneD.Code128Writer(); + // BitMatrix b = w.encode(message, BarcodeFormat.CODE_128, width, height); + // var zzb = new ZXing.ZKWeb.BarcodeWriter(); + // zzb.Options = new EncodingOptions() + // { + // Margin = 0, + // PureBarcode = false + // }; - Bitmap b2 = zzb.Write(b); + // Bitmap b2 = zzb.Write(b); - using (var ms = new System.IO.MemoryStream()) - { - b2.Save(ms, ImageFormat.Png); - var bytes = ms.ToArray(); + // using (var ms = new System.IO.MemoryStream()) + // { + // b2.Save(ms, ImageFormat.Png); + // var bytes = ms.ToArray(); - return bytes; - } + // return bytes; + // } - } + //} /// /// 打印二维码 + /// https://ironsoftware.com/csharp/barcode/blog/compare-to-other-components/zxing-net-generate-qr-code-barcode-alternatives/ /// /// /// @@ -61,25 +62,40 @@ public class PrintHelper { return null; } - var w = new ZXing.OneD.Code128Writer(); - BitMatrix b = w.encode(message, BarcodeFormat.QR_CODE, width, height); - var zzb = new ZXing.ZKWeb.BarcodeWriter(); - zzb.Options = new EncodingOptions() + Byte[] byteArray; + var margin = 0; + var qrCodeWriter = new ZXing.BarcodeWriterPixelData { - Margin = 0, - PureBarcode = false + Format = ZXing.BarcodeFormat.QR_CODE, + Options = new QrCodeEncodingOptions + { + Height = height, + Width = width, + Margin = margin + } }; - - Bitmap b2 = zzb.Write(b); - - - using (var ms = new System.IO.MemoryStream()) + var pixelData = qrCodeWriter.Write(message); + // creating a PNG bitmap from the raw pixel data; if only black and white colors are used it makes no difference if the raw pixel data is BGRA oriented and the bitmap is initialized with RGB + using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb)) { - b2.Save(ms, ImageFormat.Png); - var bytes = ms.ToArray(); - - return bytes; + using (var ms = new MemoryStream()) + { + var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb); + try + { + // we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image + System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length); + } + finally + { + bitmap.UnlockBits(bitmapData); + } + + bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png); + byteArray = ms.ToArray(); + } } + return byteArray; } diff --git a/DOANAdmin.sln b/北泽阀门MES.sln similarity index 100% rename from DOANAdmin.sln rename to 北泽阀门MES.sln