2021-11-16 22:15:30 +00:00
|
|
|
|
///
|
|
|
|
|
|
/// Copyright (c) 2021 Sensus Slovensko a.s.
|
|
|
|
|
|
///
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
|
using System.Drawing.Drawing2D;
|
|
|
|
|
|
using System.Drawing.Printing;
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
using Common;
|
|
|
|
|
|
using GenCode128;
|
|
|
|
|
|
using Gma.QrCodeNet.Encoding;
|
|
|
|
|
|
using SharedDatabase.Entities;
|
|
|
|
|
|
using OrderManagement.Resources;
|
|
|
|
|
|
|
|
|
|
|
|
namespace OrderManagement
|
|
|
|
|
|
{
|
|
|
|
|
|
public class OrderPrintDocument : Common.Printers.PrintersCommon
|
|
|
|
|
|
{
|
|
|
|
|
|
static QrEncoder encoder = new QrEncoder();
|
|
|
|
|
|
|
|
|
|
|
|
// Paper size
|
|
|
|
|
|
const bool IsLandscape = false;
|
|
|
|
|
|
const int PaperHeight = 1400;
|
|
|
|
|
|
const int PaperWidth = 900;
|
|
|
|
|
|
|
|
|
|
|
|
/// Texts
|
|
|
|
|
|
readonly Font font = new Font("Arial", 12, FontStyle.Bold);
|
|
|
|
|
|
const int Top = 100;
|
|
|
|
|
|
const int Column1left = 100;
|
|
|
|
|
|
const int Column2left = 300;
|
|
|
|
|
|
const int Spacing = 35;
|
|
|
|
|
|
|
|
|
|
|
|
/// Barcode
|
|
|
|
|
|
const bool IsQRCode = false;
|
2021-11-22 14:40:01 +00:00
|
|
|
|
const int BarcodeLeft = 550;
|
2021-11-16 22:15:30 +00:00
|
|
|
|
const int BarcodeTop = 100;
|
2021-11-22 14:40:01 +00:00
|
|
|
|
const int BarcodeWidth = 200;
|
|
|
|
|
|
const int BarcodeHeight = 75;
|
2021-11-16 22:15:30 +00:00
|
|
|
|
|
|
|
|
|
|
/// Data to print
|
|
|
|
|
|
OrderInfo order;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Constructor
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="textToPrint">Text to be printed</param>
|
|
|
|
|
|
public OrderPrintDocument(OrderInfo order)
|
|
|
|
|
|
{
|
|
|
|
|
|
DocumentName = order.POName;
|
|
|
|
|
|
|
|
|
|
|
|
this.order = order;
|
|
|
|
|
|
|
|
|
|
|
|
/// Set print area size and margins (in dots using 100 dpi)
|
|
|
|
|
|
DefaultPageSettings.Landscape = IsLandscape;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Override the default onbeginPrint method of the PrintDocument Object
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name=e></param>
|
|
|
|
|
|
/// <remarks></remarks>
|
|
|
|
|
|
protected override void OnBeginPrint(System.Drawing.Printing.PrintEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.OnBeginPrint(e);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Override the default OnPrintPage method of the PrintDocument.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name=e></param>
|
|
|
|
|
|
/// <remarks>This provides the print logic for our document</remarks>
|
|
|
|
|
|
protected override void OnPrintPage(System.Drawing.Printing.PrintPageEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
/// Run base code
|
|
|
|
|
|
base.OnPrintPage(e);
|
|
|
|
|
|
|
|
|
|
|
|
string[] texts = new string[]
|
|
|
|
|
|
{
|
|
|
|
|
|
Strings.Order + " :",
|
|
|
|
|
|
order.POName,
|
|
|
|
|
|
Strings.Pieces_count + " :",
|
|
|
|
|
|
order.PiecesCount.ToString(),
|
|
|
|
|
|
Strings.First_serial_number + " :",
|
|
|
|
|
|
string.Format("{0}{1}{2}", (order.SNPrefix != null) ? order.SNPrefix : string.Empty,
|
|
|
|
|
|
order.SNDigitsCount != 0 ? order.SNFirst.ToString(string.Format("D{0}", order.SNDigitsCount)) : string.Empty,
|
|
|
|
|
|
(order.SNSuffix != null) ? order.SNSuffix : string.Empty),
|
|
|
|
|
|
Strings.Last_serial_number + " :",
|
|
|
|
|
|
string.Format("{0}{1}{2}", (order.SNPrefix != null) ? order.SNPrefix : string.Empty,
|
|
|
|
|
|
order.SNDigitsCount != 0 ? (order.SNFirst + order.PiecesCount - 1).ToString(string.Format("D{0}", order.SNDigitsCount)) : string.Empty,
|
|
|
|
|
|
(order.SNSuffix != null) ? order.SNSuffix : string.Empty),
|
|
|
|
|
|
Strings.First_radio_address + " :",
|
|
|
|
|
|
string.Format("{0}{1}{2}", (order.RAPrefix != null) ? order.RAPrefix : string.Empty,
|
2022-01-13 12:14:01 +00:00
|
|
|
|
order.RAFirst.ToString(SharedDatabase.Const.RAFormat),
|
2021-11-16 22:15:30 +00:00
|
|
|
|
(order.RASuffix != null) ? order.RASuffix : string.Empty),
|
|
|
|
|
|
Strings.Last_radio_address + " :",
|
|
|
|
|
|
string.Format("{0}{1}{2}", (order.RAPrefix != null) ? order.RAPrefix : string.Empty,
|
2022-01-13 12:14:01 +00:00
|
|
|
|
(order.RAFirst + order.PiecesCount - 1).ToString(SharedDatabase.Const.RAFormat),
|
2021-11-16 22:15:30 +00:00
|
|
|
|
(order.RASuffix != null) ? order.RASuffix : string.Empty),
|
|
|
|
|
|
Strings.Workflow + " :",
|
|
|
|
|
|
(order.Workflow != null) ? order.Workflow : string.Empty,
|
|
|
|
|
|
Strings.Test_procedure + " :",
|
|
|
|
|
|
(order.TestProcedure != null) ? order.TestProcedure : string.Empty,
|
|
|
|
|
|
Strings.Variant_code + " :",
|
|
|
|
|
|
(order.VariantCode != null) ? order.VariantCode : string.Empty,
|
|
|
|
|
|
Strings.Laser_marking + " :",
|
|
|
|
|
|
(order.LaserMarking != null) ? order.LaserMarking : string.Empty,
|
|
|
|
|
|
Strings.Remark + " :",
|
|
|
|
|
|
(order.Remark != null) ? order.Remark : string.Empty,
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
int lineTop = Top;
|
|
|
|
|
|
for (int i = 0; i < texts.Length; i += 2)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.Graphics.DrawString(texts[i], font, Brushes.Black, new RectangleF(Column1left, lineTop, PaperWidth, PaperHeight));
|
|
|
|
|
|
e.Graphics.DrawString(texts[i + 1], font, Brushes.Black, new RectangleF(Column2left, lineTop, PaperWidth, PaperHeight));
|
|
|
|
|
|
lineTop += Spacing;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
if (IsQRCode)
|
|
|
|
|
|
{
|
|
|
|
|
|
QrCode qrCode = encoder.Encode(order.POName);
|
|
|
|
|
|
DrawQR(e.Graphics, qrCode, BarcodeLeft, BarcodeTop, BarcodeWidth, BarcodeHeight);
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Image img = Code128Rendering.MakeBarcodeImage(order.POName, 1, true);
|
|
|
|
|
|
#if VERTICAL_BARCODE
|
|
|
|
|
|
img.RotateFlip(RotateFlipType.Rotate90FlipNone);
|
|
|
|
|
|
#endif
|
|
|
|
|
|
e.Graphics.DrawImage(img, BarcodeLeft, BarcodeTop, BarcodeWidth, BarcodeHeight);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void DrawQR(Graphics g, QrCode qrCode, float left, float top, float width, float height)
|
|
|
|
|
|
{
|
|
|
|
|
|
/// Assuming 100 dpi (printer)
|
|
|
|
|
|
g.SmoothingMode = SmoothingMode.AntiAlias;
|
|
|
|
|
|
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
|
|
|
|
|
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
|
|
|
|
|
|
|
|
|
|
|
|
float qrPixWidth = width / qrCode.Matrix.Width;
|
|
|
|
|
|
float qrPixHeight = height / qrCode.Matrix.Height;
|
|
|
|
|
|
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 RectangleF(left + j * qrPixWidth,
|
|
|
|
|
|
top + i * qrPixHeight,
|
|
|
|
|
|
qrPixWidth,
|
|
|
|
|
|
qrPixHeight));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|