@ -1,4 +1,5 @@
using System.ComponentModel ;
using System.Configuration ;
using System.Data ;
using System.IO ;
using System.IO.Ports ;
@ -31,6 +32,7 @@ using System.Windows.Media;
using Brush = System . Drawing . Brush ;
using Brushes = System . Drawing . Brushes ;
using SparkClient.Model.Attributes ;
using PaperSize = System . Drawing . Printing . PaperSize ;
namespace SparkClient.ViewModel.Grading ;
/// <summary>
@ -1833,40 +1835,60 @@ public class GradingResultVM : BaseViewModel
CustomPrintPreviewForm customPreviewForm = new CustomPrintPreviewForm ( printDocument ) ;
// 显示自定义打印预览窗体
// DialogResult result = customPreviewForm.ShowDialog();
MessageBox messageBox = new MessageBox ( ) ;
MessageBoxResult boxResult = messageBox . ShowAsk ( MultilingualHelper . getString ( "YesOrNo" ) ) ;
if ( boxResult = = MessageBoxResult . OK )
{
// 打开串口
if ( ! _ serialPort . IsOpen )
{
_ serialPort . Open ( ) ;
}
// if (!_serialPort.IsOpen )
// {
// _serialPort.Open() ;
// }
// 将绘制内容转换为字节数组
MemoryStream memoryStream = new MemoryStream ( ) ;
using ( Bitmap bitmap = new Bitmap ( ( int ) printDocument . DefaultPageSettings . PrintableArea . Width , ( int ) printDocument . DefaultPageSettings . PrintableArea . Height ) )
// MemoryStream memoryStream = new MemoryStream();
// using (Bitmap bitmap = new Bitmap((int)printDocument.DefaultPageSettings.PrintableArea.Width, (int)printDocument.DefaultPageSettings.PrintableArea.Height))
// {
// using (var graphics = Graphics.FromImage(bitmap))
// {
// // 计算可打印区域的 Rectangle
// var margins = new Margins(0, 0, 0, 0);
// var printableArea = new System.Drawing.Rectangle(margins.Left, margins.Top,
// (int)printDocument.DefaultPageSettings.PrintableArea.Width - margins.Left - margins.Right,
// (int)printDocument.DefaultPageSettings.PrintableArea.Height - margins.Top - margins.Bottom);
/ /
// // 调用 PreparePrintData 方法绘制内容到 Graphics 对象
// // 注意这里的第三个参数应该是 Rectangle 类型
// PreparePrintData(printDocument, new PrintPageEventArgs(graphics, printableArea, printableArea, new PageSettings()));
// }
// // 将 Bitmap 保存到 MemoryStream 中
// bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
// }
// byte[] dataToSend = memoryStream.ToArray();
string? printName = ConfigurationManager . AppSettings [ "PrintName" ] ;
string? printWidth = ConfigurationManager . AppSettings [ "PrintWidth" ] ;
string? printHeight = ConfigurationManager . AppSettings [ "PrintHeight" ] ;
int pageWidth = 4 0 0 ;
int pageHeight = 3 0 0 ;
if ( string . IsNullOrWhiteSpace ( printName ) | | string . IsNullOrWhiteSpace ( printWidth ) | |
string . IsNullOrWhiteSpace ( printHeight ) )
{
using ( var graphics = Graphics . FromImage ( bitmap ) )
{
// 计算可打印区域的 Rectangle
var margins = new Margins ( 0 , 0 , 0 , 0 ) ;
var printableArea = new System . Drawing . Rectangle ( margins . Left , margins . Top ,
( int ) printDocument . DefaultPageSettings . PrintableArea . Width - margins . Left - margins . Right ,
( int ) printDocument . DefaultPageSettings . PrintableArea . Height - margins . Top - margins . Bottom ) ;
// 调用 PreparePrintData 方法绘制内容到 Graphics 对象
// 注意这里的第三个参数应该是 Rectangle 类型
PreparePrintData ( printDocument , new PrintPageEventArgs ( graphics , printableArea , printableArea , new PageSettings ( ) ) ) ;
}
// 将 Bitmap 保存到 MemoryStream 中
bitmap . Save ( memoryStream , System . Drawing . Imaging . ImageFormat . Png ) ;
Logger . Info ( "缺少打印配置。" ) ;
throw new Exception ( "The printer parameter is invalid" ) ;
}
byte [ ] dataToSend = memoryStream . ToArray ( ) ;
int . TryParse ( printWidth , out pageWidth ) ;
int . TryParse ( printHeight , out pageHeight ) ;
printDocument . PrinterSettings . PrinterName = printName ;
printDocument . DefaultPageSettings . PaperSize = new PaperSize ( "mm" , pageWidth , pageHeight ) ;
printDocument . PrintController = new System . Drawing . Printing . StandardPrintController ( ) ;
// DialogResult result = customPreviewForm.ShowDialog();
printDocument . Print ( ) ;
// 发送数据到串口
_ serialPort . Write ( dataToSend , 0 , dataToSend . Length ) ;
//_serialPort.Write(dataToSend, 0, dataToSend.Length);
Logger . Info ( "数据已发送到热敏打印机。" ) ;
}
@ -1879,10 +1901,10 @@ public class GradingResultVM : BaseViewModel
finally
{
// 关闭串口
if ( _ serialPort . IsOpen )
{
_ serialPort . Close ( ) ;
}
// if (_serialPort.IsOpen )
// {
// _serialPort.Close() ;
// }
}
}
@ -1951,13 +1973,18 @@ public class GradingResultVM : BaseViewModel
[Log]
private void PreparePrintData ( object sender , PrintPageEventArgs e )
{
int width = e . PageSettings . PaperSize . Width ;
var result = algorithmResult . measurements ;
int startX = 1 0 ;
int startY = 1 0 ;
var col2X = startX + 1 6 0 ;
var col3X = col2X + 1 0 0 ;
int startX = 3 ;
int startY = 3 ;
var col2X = startX + ( width * 0.2f ) ;
var col3X = col2X + ( width * 0.2f ) ;
var col4X = col3X + ( width * 0.2f ) ;
var col5X = col4X + ( width * 0.2f ) ;
// 设置字体
Font font = new Font ( FontFamily . GenericSerif , 1 2 , FontStyle . Bold ) ;
Font font = new Font ( FontFamily . GenericSerif , 6 , FontStyle . Bold ) ;
// 设置颜色
Brush brush = Brushes . Black ;
@ -1970,125 +1997,125 @@ public class GradingResultVM : BaseViewModel
// 绘制文本
// 第一行
in t X = startX ;
in t Y = startY ;
floa t X = startX ;
floa t Y = startY ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" Organization ")}:{Standard}" , font , brush , new PointF ( X , Y ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" DiamondResultShape ")}:{Shape}" , font , brush , new PointF ( col2X , Y ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" Code ")}:{DiamondCode}" , font , brush , new PointF ( col3X , Y ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" Wight ")}:{Wight}ct." , font , brush , new PointF ( 5 4 0 , Y ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" Wight ")}:{Wight}ct." , font , brush , new PointF ( col5X , Y ) ) ;
// 第二行
X = startX ;
Y + = font . Height ;
Y + = font . Height + 2 ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" Parameters ")}" , font , brush , new PointF ( X , Y ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" DiamondResultGridAvgValue ")}" , font , brush , new PointF ( col2X , Y ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" Interval ")}(Min~Max) " , font , brush , new PointF ( col3X , Y ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" DiamondResultGridCutLevel ")}" , font , brush , new PointF ( 4 2 0 , Y ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" DiamondResultSymmetryGrade ")}" , font , brush , new PointF ( 5 4 0 , Y ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" Interval ")}(Min~Max) " , font , brush , new PointF ( col3X , Y ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" DiamondResultGridCutLevel ")}" , font , brush , new PointF ( col4X , Y ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" DiamondResultSymmetryGrade ")}" , font , brush , new PointF ( col5X , Y ) ) ;
// 第三行
// 直径
var d = getSelectData ( "DIAMETER" ) ;
X = startX ;
Y + = font . Height ;
Y + = font . Height + 2 ;
e . Graphics . DrawString ( $"{GetName(" DIAMETER ")}(mm)" , font , brush , new PointF ( X , Y ) ) ;
X = col2X ;
e . Graphics . DrawString ( d . Avg , font , brush , new PointF ( X , Y ) ) ;
X = col3X ;
e . Graphics . DrawString ( $"({d.Min}-{d.Max})" , font , brush , new PointF ( X , Y ) ) ;
e . Graphics . DrawString ( $"-" , font , brush , new PointF ( 4 2 0 , Y ) ) ;
e . Graphics . DrawString ( $"{d.SymLevel}" , font , brush , new PointF ( 5 4 0 , Y ) ) ;
e . Graphics . DrawString ( $"-" , font , brush , new PointF ( col4X , Y ) ) ;
e . Graphics . DrawString ( $"{d.SymLevel}" , font , brush , new PointF ( col5X , Y ) ) ;
// 第四行
// 全深比
var o = getSelectData ( "TOTAL_DEPTH" ) ;
X = startX ;
Y + = font . Height ;
Y + = font . Height + 2 ;
e . Graphics . DrawString ( $"{GetName(" TOTAL_DEPTH ")}(%)" , font , brush , new PointF ( X , Y ) ) ;
X = col2X ;
e . Graphics . DrawString ( o . Avg , font , brush , new PointF ( X , Y ) ) ;
X = col3X ;
e . Graphics . DrawString ( $"-" , font , brush , new PointF ( X , Y ) ) ;
e . Graphics . DrawString ( $"{o.CutLevel}" , font , brush , new PointF ( 4 2 0 , Y ) ) ;
e . Graphics . FillRectangle ( backgroundBrush , new RectangleF ( 5 4 0 , Y , 1 0 0 , font . Height ) ) ;
e . Graphics . DrawString ( $"{o.CutLevel}" , font , brush , new PointF ( col4X , Y ) ) ;
e . Graphics . FillRectangle ( backgroundBrush , new RectangleF ( col5X , Y , 1 5 0 , font . Height ) ) ;
// 第五行
// 台宽比
var t = getSelectData ( "TABLE" ) ;
X = startX ;
Y + = font . Height ;
Y + = font . Height + 2 ;
e . Graphics . DrawString ( $"{GetName(" TABLE ")}(%)" , font , brush , new PointF ( X , Y ) ) ;
X = col2X ;
e . Graphics . DrawString ( t . Avg , font , brush , new PointF ( X , Y ) ) ;
X = col3X ;
e . Graphics . DrawString ( $"({t.Min}-{t.Max})" , font , brush , new PointF ( X , Y ) ) ;
e . Graphics . DrawString ( $"{t.CutLevel}" , font , brush , new PointF ( 4 2 0 , Y ) ) ;
e . Graphics . FillRectangle ( backgroundBrush , new RectangleF ( 5 4 0 , Y , 1 0 0 , font . Height ) ) ;
e . Graphics . DrawString ( $"{t.CutLevel}" , font , brush , new PointF ( col4X , Y ) ) ;
e . Graphics . FillRectangle ( backgroundBrush , new RectangleF ( col5X , Y , 1 5 0 , font . Height ) ) ;
// 第六行
// 冠角
var c = getSelectData ( "CROWN_ANGLE" ) ;
X = startX ;
Y + = font . Height ;
Y + = font . Height + 2 ;
e . Graphics . DrawString ( $"{GetName(" CROWN_ANGLE ")}(°)" , font , brush , new PointF ( X , Y ) ) ;
X = col2X ;
e . Graphics . DrawString ( c . Avg , font , brush , new PointF ( X , Y ) ) ;
X = col3X ;
e . Graphics . DrawString ( $"({c.Min}-{c.Max})" , font , brush , new PointF ( X , Y ) ) ;
X + = 1 2 0 ;
e . Graphics . DrawString ( $"{c.CutLevel}" , font , brush , new PointF ( 4 2 0 , Y ) ) ;
e . Graphics . DrawString ( $"{c.SymLevel}" , font , brush , new PointF ( 5 4 0 , Y ) ) ;
e . Graphics . DrawString ( $"{c.CutLevel}" , font , brush , new PointF ( col4X , Y ) ) ;
e . Graphics . DrawString ( $"{c.SymLevel}" , font , brush , new PointF ( col5X , Y ) ) ;
// 第七行
// 冠高比
var h = getSelectData ( "CROWN_HEIGHT" ) ;
X = startX ;
Y + = font . Height ;
Y + = font . Height + 2 ;
e . Graphics . DrawString ( $"{GetName(" CROWN_HEIGHT ")}(%)" , font , brush , new PointF ( X , Y ) ) ;
X = col2X ;
e . Graphics . DrawString ( h . Avg , font , brush , new PointF ( X , Y ) ) ;
X = col3X ;
e . Graphics . DrawString ( $"({h.Min}-{h.Max})" , font , brush , new PointF ( X , Y ) ) ;
X + = 6 0 ;
e . Graphics . DrawString ( $"{h.CutLevel}" , font , brush , new PointF ( 4 2 0 , Y ) ) ;
e . Graphics . DrawString ( $"{h.SymLevel}" , font , brush , new PointF ( 5 4 0 , Y ) ) ;
e . Graphics . DrawString ( $"{h.CutLevel}" , font , brush , new PointF ( col4X , Y ) ) ;
e . Graphics . DrawString ( $"{h.SymLevel}" , font , brush , new PointF ( col5X , Y ) ) ;
// 第八行
// 波谷腰厚
var g = getSelectData ( "GIRDLE" ) ;
X = startX ;
Y + = font . Height ;
Y + = font . Height + 2 ;
e . Graphics . DrawString ( $"{GetName(" GIRDLE ")}(%)" , font , brush , new PointF ( X , Y ) ) ;
X = col2X ;
e . Graphics . DrawString ( g . Avg , font , brush , new PointF ( X , Y ) ) ;
X = col3X ;
e . Graphics . DrawString ( $"({g.Min}-{g.Max})" , font , brush , new PointF ( X , Y ) ) ;
e . Graphics . DrawString ( $"{g.CutLevel}" , font , brush , new PointF ( 4 2 0 , Y ) ) ;
e . Graphics . DrawString ( $"{g.SymLevel}" , font , brush , new PointF ( 5 4 0 , Y ) ) ;
e . Graphics . DrawString ( $"{g.CutLevel}" , font , brush , new PointF ( col4X , Y ) ) ;
e . Graphics . DrawString ( $"{g.SymLevel}" , font , brush , new PointF ( col5X , Y ) ) ;
// 第九行
// 亭深比
var p = getSelectData ( "PAV_DEPTH" ) ;
X = startX ;
Y + = font . Height ;
Y + = font . Height + 2 ;
e . Graphics . DrawString ( $"{GetName(" PAV_DEPTH ")}(%)" , font , brush , new PointF ( X , Y ) ) ;
X = col2X ;
e . Graphics . DrawString ( p . Avg , font , brush , new PointF ( X , Y ) ) ;
X = col3X ;
e . Graphics . DrawString ( $"({p.Min}-{p.Max})" , font , brush , new PointF ( X , Y ) ) ;
e . Graphics . DrawString ( $"{p.CutLevel}" , font , brush , new PointF ( 4 2 0 , Y ) ) ;
e . Graphics . DrawString ( $"{p.SymLevel}" , font , brush , new PointF ( 5 4 0 , Y ) ) ;
e . Graphics . DrawString ( $"{p.CutLevel}" , font , brush , new PointF ( col4X , Y ) ) ;
e . Graphics . DrawString ( $"{p.SymLevel}" , font , brush , new PointF ( col5X , Y ) ) ;
// 第十行
X = startX ;
Y + = font . Height ;
e . Graphics . FillRectangle ( backgroundBrush , new RectangleF ( X , Y , 1 3 0 , font . Height ) ) ;
Y + = font . Height + 2 ;
e . Graphics . FillRectangle ( backgroundBrush , new RectangleF ( X , Y , col2X - 5 , font . Height ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" CuttingGrade ")}" , font , Brushes . White , new PointF ( X , Y ) ) ;
X = col2X ;
e . Graphics . DrawString ( CutLevelTotal , font , Brushes . Red , new PointF ( X , Y ) ) ;
e . Graphics . DrawString ( CutLevelTotal , font , Brushes . Black , new PointF ( X , Y ) ) ;
// 第十一行
X = startX ;
Y + = font . Height ;
e . Graphics . FillRectangle ( backgroundBrush , new RectangleF ( X , Y , 1 3 0 , font . Height ) ) ;
Y + = font . Height + 2 ;
e . Graphics . FillRectangle ( backgroundBrush , new RectangleF ( X , Y , col2X - 5 , font . Height ) ) ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" SymmetryLevel ")}" , font , Brushes . White , new PointF ( X , Y ) ) ;
X = col2X ;
e . Graphics . DrawString ( SymLevelTotal , font , Brushes . Red , new PointF ( X , Y ) ) ;
e . Graphics . DrawString ( SymLevelTotal , font , Brushes . Black , new PointF ( X , Y ) ) ;
X = col3X ;
e . Graphics . DrawString ( $"{MultilingualHelper.getString(" DateOfIssue ")}: {DateTime.Now:yyyy/M/d}" , font , brush , new PointF ( X , Y ) ) ;