diff --git a/ViewModel/Grading/GradingResultVM.cs b/ViewModel/Grading/GradingResultVM.cs
index 73a4cad..055d428 100644
--- a/ViewModel/Grading/GradingResultVM.cs
+++ b/ViewModel/Grading/GradingResultVM.cs
@@ -23,6 +23,15 @@ using SparkClient.Views.UserControl.ViewportData.Helper;
 using System.Diagnostics.Metrics;
 using log4net;
 using SparkClient.ViewModel.Configuration;
+using System.Drawing.Printing;
+using System.Drawing;
+using RectangleF = System.Drawing.RectangleF;
+using FontFamily = System.Drawing.FontFamily;
+using FontStyle = System.Drawing.FontStyle;
+using NPOI.SS.Formula.Functions;
+using System.Windows.Media;
+using Brush = System.Drawing.Brush;
+using Brushes = System.Drawing.Brushes;
 
 namespace SparkClient.ViewModel.Grading;
 /// <summary>
@@ -828,6 +837,7 @@ public class GradingResultVM : BaseViewModel
                 }
             }
             SaveTestResult(SaveStatus.SaveAs);
+            //PrintLabel();
         }
         catch (Exception ex)
         {
@@ -1644,6 +1654,130 @@ public class GradingResultVM : BaseViewModel
     }
     #endregion
 
+    public void PrintLabel()
+    {
+        PrintDocument printDoc = new PrintDocument();
+        printDoc.PrintPage += new PrintPageEventHandler(PrintPageHandler);
+        printDoc.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("Custom", 550, 300);
+
+        PrintDialog printDialog = new PrintDialog();
+        printDialog.Document = printDoc;
+
+        if (printDialog.ShowDialog() == DialogResult.OK)
+        {
+            printDoc.Print();
+        }
+    }
+
+    private void PrintPageHandler(object sender, PrintPageEventArgs e)
+    {
+        var result = algorithmResult.measurements;
+        int startX = 10;
+        int startY = 10;
+        var col2X = startX + 90;
+        var col3X = col2X + 70;
+        // 设置字体
+        Font font = new Font(FontFamily.GenericSerif, 12, FontStyle.Bold);
+
+        // 设置颜色
+        Brush brush = Brushes.Black;
+
+        // 设置对齐方式
+        StringFormat format = new StringFormat();
+        format.Alignment = StringAlignment.Center; // 水平居中
+        format.LineAlignment = StringAlignment.Center; // 垂直居中
+
+        // 绘制文本 
+        // 第一行
+        int X = startX;
+        int Y = startY;
+        e.Graphics.DrawString(Standard, font, brush, new PointF(X, Y));
+        X += 70;
+        e.Graphics.DrawString(Shape, font, brush, new PointF(X, Y));
+        X += 50;
+        e.Graphics.DrawString($"ID:{DiamondCode}", font, brush, new PointF(X, Y));
+        X += 100;
+        e.Graphics.DrawString($"Weight:{Wight}ct.", font, brush, new PointF(X, Y));
+        X += 120;
+        Brush backgroundBrush = new SolidBrush(System.Drawing.Color.Black); // 背景色为黄色
+        e.Graphics.FillRectangle(backgroundBrush, new RectangleF(X, Y, 200, font.Height));
+        e.Graphics.DrawString(CutLevelTotal, font, Brushes.White, new PointF(X, Y));
+
+        // 第二行
+        X = startX;
+        Y += font.Height;
+        e.Graphics.DrawString("Diameter", font, brush, new PointF(X, Y));
+
+        e.Graphics.DrawString($"{FormatDouble_D(result.DIAMETER)}mm", font, brush, new PointF(col2X, Y));
+
+        e.Graphics.DrawString($"({FormatDouble_D(result.M1)}mm-{FormatDouble_D(result.M2)}mm)", font, brush, new PointF(col3X, Y));
+        e.Graphics.DrawString($"0.3%", font, brush, new PointF(310, Y));
+        e.Graphics.FillRectangle(backgroundBrush, new RectangleF(350, Y, 200, font.Height));
+        e.Graphics.DrawString(SymLevelTotal, font, Brushes.White, new PointF(X, Y));
+
+        // 第三行
+        X = startX;
+        Y += font.Height;
+        e.Graphics.DrawString("Total Dep.", font, brush, new PointF(X, Y));
+        X = col2X;
+        e.Graphics.DrawString($"{FormatDouble_D(result.DIAMETER * result.TOTAL_DEPTH)}mm", font, brush, new PointF(X, Y));
+        X = col3X;
+        e.Graphics.DrawString($"{FormatDouble_P(result.TOTAL_DEPTH)}%", font, brush, new PointF(X, Y));
+        e.Graphics.DrawString($"{DtResults.Where(X=> "TOTAL_DEPTH".Equals(X.TestItemId)).Select(X=>X.CutLevel).FirstOrDefault()}", font, brush, new PointF(480, Y));
+        // 第四行
+        X = startX;
+        Y += font.Height;
+        e.Graphics.DrawString("Table", font, brush, new PointF(X, Y));
+        X = col2X;
+        e.Graphics.DrawString($"{FormatDouble_D(result.DIAMETER * result.TABLE)}mm", font, brush, new PointF(X, Y));
+        X = col3X;
+        e.Graphics.DrawString($"{FormatDouble_P(result.TABLE)}%", font, brush, new PointF(X, Y));
+        e.Graphics.DrawString($"{DtResults.Where(X => "TABLE".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(480, Y));
+        // 第五行
+        X = startX;
+        Y += font.Height;
+        e.Graphics.DrawString("Crown", font, brush, new PointF(X, Y));
+        X = col2X;
+        e.Graphics.DrawString($"{FormatDouble_A(result.CROWN_ANGLE)}°", font, brush, new PointF(X, Y));
+        X = col3X;
+        e.Graphics.DrawString($"({FormatDouble_A(result.CROWN_ANGLE_MIN)}°-{FormatDouble_A(result.CROWN_ANGLE_MAX)}°)", font, brush, new PointF(X, Y));
+        X += 120;
+        e.Graphics.DrawString($"({FormatDouble_A(result.CROWN_HEIGHT)}%)", font, brush, new PointF(X, Y));
+        e.Graphics.DrawString($"{DtResults.Where(X => "CROWN_ANGLE".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(410, Y));
+        e.Graphics.DrawString($"{DtResults.Where(X => "CROWN_HEIGHT".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(480, Y));
+        // 第六行
+        X = startX;
+        Y += font.Height;
+        e.Graphics.DrawString("Pavil.", font, brush, new PointF(X, Y));
+        X = col2X;
+        e.Graphics.DrawString($"{FormatDouble_A(result.PAV_ANGLE)}°", font, brush, new PointF(X, Y));
+        X = col3X;
+        e.Graphics.DrawString($"({FormatDouble_A(result.PAV_ANGLE_MIN)}°-{FormatDouble_A(result.PAV_ANGLE_MAX)}°)", font, brush, new PointF(X, Y));
+        X += 120;
+        e.Graphics.DrawString($"({FormatDouble_A(result.PAV_DEPTH)}%)", font, brush, new PointF(X, Y));
+        e.Graphics.DrawString($"{DtResults.Where(X => "PAV_ANGLE".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(410, Y));
+        e.Graphics.DrawString($"{DtResults.Where(X => "PAV_DEPTH".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(480, Y));
+        // 第七行
+        X = startX;
+        Y += font.Height;
+        e.Graphics.DrawString("Culet", font, brush, new PointF(X, Y));
+        X = col2X;
+        e.Graphics.DrawString($"{FormatDouble_P(result.CULET)}%", font, brush, new PointF(X, Y));
+        X = col3X;
+        e.Graphics.DrawString($"Twist", font, brush, new PointF(X, Y));
+        X += 60;
+        e.Graphics.DrawString($"({FormatDouble_A(result.TWIST_MIN)}°-{FormatDouble_A(result.TWIST_MAX)}°)", font, brush, new PointF(X, Y));
+        // 第八行
+        X = startX;
+        Y += font.Height;
+        e.Graphics.DrawString("Girdle 16M", font, brush, new PointF(X, Y));
+        X = col2X;
+        e.Graphics.DrawString($"{FormatDouble_D(result.GIRDLE_VALLEY)}", font, brush, new PointF(X, Y));
+        X = col3X;
+        e.Graphics.DrawString($"({FormatDouble_P(result.GIRDLE_VALLEY_MIN)}%-{FormatDouble_P(result.GIRDLE_VALLEY_MAX)}%)", font, brush, new PointF(X, Y));
+        e.Graphics.DrawString($"{DtResults.Where(X => "GIRDLE".Equals(X.TestItemId)).Select(X => X.CutLevel).FirstOrDefault()}", font, brush, new PointF(480, Y));
+
+    }
     #region 钻石操作相关
     //暂略
     //部分代码(直接操作控件)需要在xaml.cs里边写
diff --git a/Views/Dialog/ExportDialog.xaml.cs b/Views/Dialog/ExportDialog.xaml.cs
index d129168..89d74ad 100644
--- a/Views/Dialog/ExportDialog.xaml.cs
+++ b/Views/Dialog/ExportDialog.xaml.cs
@@ -1,4 +1,5 @@
-using System;
+using log4net;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -19,6 +20,7 @@ namespace SparkClient.Views.Dialog
     /// </summary>
     public partial class ExportDialog : Window
     {
+        private static readonly ILog Logger = LogManager.GetLogger(typeof(ExportDialog));
         public ExportDialog()
         {
             InitializeComponent();
diff --git a/Views/Dialog/JsonImport.xaml.cs b/Views/Dialog/JsonImport.xaml.cs
index 26964b1..f0cf9b5 100644
--- a/Views/Dialog/JsonImport.xaml.cs
+++ b/Views/Dialog/JsonImport.xaml.cs
@@ -1,6 +1,8 @@
 using HandyControl.Controls;
+using log4net;
 using SparkClient.ViewModel;
 using SparkClient.ViewModel.Dialog;
+using SparkClient.Views.Grading;
 using System.IO;
 using System.Windows;
 using System.Windows.Controls;
@@ -14,6 +16,7 @@ namespace SparkClient.Views.Dialog
     /// </summary>
     public partial class JsonImport
     {
+        private static readonly ILog Logger = LogManager.GetLogger(typeof(JsonImport));
         public BaseViewModel ViewModel = null;
         public JsonImport()
         {
diff --git a/Views/Dialog/MessageBox.xaml.cs b/Views/Dialog/MessageBox.xaml.cs
index 6ad6bf1..3a1ac76 100644
--- a/Views/Dialog/MessageBox.xaml.cs
+++ b/Views/Dialog/MessageBox.xaml.cs
@@ -3,12 +3,15 @@ using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Input;
 using System.Windows.Media;
+using log4net;
 using SparkClient.Model.Helper;
+using SparkClient.Views.Grading;
 
 namespace SparkClient.Views.Dialog;
 
 public partial class MessageBox : Window
 {
+    private static readonly ILog Logger = LogManager.GetLogger(typeof(GradingResult));
     public MessageBox()
     {
         InitializeComponent();
diff --git a/Views/Grading/GradingResult.xaml.cs b/Views/Grading/GradingResult.xaml.cs
index 9038466..b8ce535 100644
--- a/Views/Grading/GradingResult.xaml.cs
+++ b/Views/Grading/GradingResult.xaml.cs
@@ -4,6 +4,7 @@ using System.Windows.Controls.Primitives;
 using System.Windows.Input;
 using System.Windows.Media;
 using System.Windows.Media.Imaging;
+using log4net;
 using SparkClient.ViewModel.Grading;
 using GeometryModel3D = HelixToolkit.Wpf.SharpDX.GeometryModel3D;
 
@@ -11,6 +12,8 @@ namespace SparkClient.Views.Grading;
 
 public partial class GradingResult 
 {
+    private static readonly ILog Logger = LogManager.GetLogger(typeof(GradingResult));
+
     // List<Viewport3DTriangleEntity> triangles = new List<Viewport3DTriangleEntity>();
     List<GeometryModel3D> mouseAddModels = new List<GeometryModel3D>();
     // 用于记录当前所有已存在的Popup