138 lines
5.6 KiB
C#
138 lines
5.6 KiB
C#
///
|
|
/// Copyright (c) 2016-2019 Sensus Slovensko a.s.
|
|
///
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Drawing.Printing;
|
|
using Gma.QrCodeNet.Encoding;
|
|
|
|
namespace RecordProcessing.Records
|
|
{
|
|
public class RFTestPrintDocument : PrintDocument
|
|
{
|
|
int printWidth;
|
|
int printHeight;
|
|
int leftMargin;
|
|
int topMargin;
|
|
|
|
RFTestRecord record;
|
|
QrCode qrCode;
|
|
|
|
|
|
/// <summary>
|
|
/// Constructor
|
|
/// </summary>
|
|
/// <param name="bitmap">Bitmap to be printed</param>
|
|
/// <param name="paperWidth">Label width</param>
|
|
/// <param name="paperHeight">Label height</param>
|
|
/// <param name="landscape">true = landscape</param>
|
|
public RFTestPrintDocument(RFTestRecord rcrd, QrCode qrCd, bool landscape)
|
|
{
|
|
this.record = rcrd;
|
|
this.qrCode = qrCd;
|
|
|
|
DefaultPageSettings.Landscape = landscape;
|
|
|
|
/// Set print area size and margins (in dots using 80 dpi)
|
|
if (landscape)
|
|
{
|
|
printWidth = base.DefaultPageSettings.PaperSize.Height - base.DefaultPageSettings.Margins.Top - base.DefaultPageSettings.Margins.Bottom;
|
|
printHeight = base.DefaultPageSettings.PaperSize.Width - base.DefaultPageSettings.Margins.Left - base.DefaultPageSettings.Margins.Right;
|
|
leftMargin = base.DefaultPageSettings.Margins.Top; /// X
|
|
topMargin = base.DefaultPageSettings.Margins.Left; /// Y
|
|
}
|
|
else
|
|
{
|
|
printHeight = base.DefaultPageSettings.PaperSize.Height - base.DefaultPageSettings.Margins.Top - base.DefaultPageSettings.Margins.Bottom;
|
|
printWidth = base.DefaultPageSettings.PaperSize.Width - base.DefaultPageSettings.Margins.Left - base.DefaultPageSettings.Margins.Right;
|
|
leftMargin = base.DefaultPageSettings.Margins.Left; /// X
|
|
topMargin = base.DefaultPageSettings.Margins.Top; /// Y
|
|
}
|
|
}
|
|
|
|
protected override void OnBeginPrint(System.Drawing.Printing.PrintEventArgs e)
|
|
{
|
|
base.OnBeginPrint(e); /// Run base code
|
|
}
|
|
|
|
protected override void OnPrintPage(System.Drawing.Printing.PrintPageEventArgs e)
|
|
{
|
|
base.OnPrintPage(e); /// Run base code
|
|
DrawLabel(e.Graphics, record, qrCode);
|
|
e.HasMorePages = false;
|
|
}
|
|
|
|
public static void DrawLabel(Graphics g, RFTestRecord record, QrCode qrCode)
|
|
{
|
|
/// Assuming 100 dpi (printer), drawing size: 2 inch (width) x 1 inch (height)
|
|
const int W = 200;
|
|
const int H = 100;
|
|
const int Left = 0;
|
|
const int Top = 0;
|
|
const int L1 = Left + 10;
|
|
const int L2 = Left + 58;
|
|
const int L3 = Left + 77;
|
|
const int L4 = Left + 151;
|
|
const int T0 = Top;
|
|
const int T1 = Top + 3;
|
|
const int T2 = Top + 22;
|
|
const int T25 = T2 + 17 / 2;
|
|
const int T3 = T2 + 1 * 17;
|
|
const int T4 = T2 + 2 * 17;
|
|
const int T5 = T2 + 3 * 17;
|
|
const int QRL = Left + 151;
|
|
const int QRT = Top + 48;
|
|
const int QrSize = 42;
|
|
|
|
string fontFamily = "Arial Narrow";
|
|
Font font1 = new Font(fontFamily, 11, FontStyle.Bold);
|
|
Font font2 = new Font(fontFamily, 9, FontStyle.Regular);
|
|
Font font3 = new Font(fontFamily, 20, FontStyle.Bold);
|
|
|
|
g.SmoothingMode = SmoothingMode.AntiAlias;
|
|
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
|
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
|
|
|
|
g.Clear(Color.White);
|
|
if (record.Status == Status.Passed)
|
|
{
|
|
g.DrawString("RF test PASSED", font1, Brushes.Black, new Rectangle(L1, T1, L4 - L1, T2 - T1));
|
|
}
|
|
else
|
|
{
|
|
g.DrawString("RF test FAILED", font1, Brushes.Red, new Rectangle(L1, T1, L4 - L1, T2 - T1));
|
|
}
|
|
|
|
g.DrawString("PCB nr.:", font2, Brushes.Black, new Rectangle(L1, T2, L2 - L1, T3 - T2));
|
|
g.DrawString("Mat. nr.:", font2, Brushes.Black, new Rectangle(L1, T3, L2 - L1, T3 - T2));
|
|
g.DrawString("Cust. order:", font2, Brushes.Black, new Rectangle(L1, T4, L2 - L1, T3 - T2));
|
|
g.DrawString("TB failed:", font2, Brushes.Black, new Rectangle(L1, T5, L3 - L1, T3 - T2));
|
|
|
|
g.DrawString(record.SN, font2, Brushes.Black, new Rectangle(L2, T2, L4 - L2, T3 - T2));
|
|
g.DrawString("INV-HIPGO02", font2, Brushes.Black, new Rectangle(L2, T3, L4 - L2, T3 - T2));
|
|
g.DrawString("CCAATMXXXX", font2, Brushes.Black, new Rectangle(L2, T4, L4 - L2, T3 - T2));
|
|
|
|
g.DrawString(record.PrintedInfo, font3, Brushes.Black, new Rectangle(L4, T0, W - L4, QRT - T1));
|
|
g.DrawString(record.FrequencyInfo, font2, Brushes.Black, new Rectangle(L4, T25, W - L4, QRT - T1));
|
|
|
|
g.DrawRectangle(new Pen(Brushes.Black, 1), new Rectangle(L3, T5 + 2, 15, 15));
|
|
g.DrawRectangle(new Pen(Brushes.Black, 1), new Rectangle(L3 + 22, T5 + 2, 15, 15));
|
|
g.DrawRectangle(new Pen(Brushes.Black, 1), new Rectangle(L3 + 44, T5 + 2, 15, 15));
|
|
|
|
g.Flush();
|
|
|
|
int QrPixSize = QrSize / qrCode.Matrix.Width;
|
|
for (int i = 0; i < qrCode.Matrix.Height; i++)
|
|
{
|
|
for (int j = 0; j < qrCode.Matrix.Width; j++)
|
|
{
|
|
if (qrCode.Matrix[j, i])
|
|
{
|
|
g.FillRectangle(Brushes.Black, new Rectangle(QRL + QrPixSize * j, QRT + QrPixSize * i, QrPixSize, QrPixSize));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|