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