public override void Start(IWorkerParameters parameters)
        {
            var labelPrintParameters = new LabelPrintParameters(parameters);

            var labelPrintDocument = new LabelPrintDocument();

            labelPrintDocument.Print(labelPrintParameters);
        }
            public void Print(LabelPrintParameters parameters)
            {
                if (parameters == null)
                {
                    throw new ArgumentNullException(nameof(parameters));
                }

                PrintParameters = parameters;
                if (!CanPrintLabel() || Font == null)
                {
                    return;
                }

                var   bitmap = new Bitmap(560, 450);
                Brush brush  = Brushes.Black;
                var   pen    = new Pen(brush);

                _trackedPositions = new List <int>();

                using (Graphics g = Graphics.FromImage(bitmap))
                {
                    g.SmoothingMode   = SmoothingMode.HighQuality;
                    g.PixelOffsetMode = PixelOffsetMode.HighQuality;

                    g.TranslateTransform(bitmap.Width / 2, bitmap.Height / 2);
                    g.RotateTransform(270);

                    if (PrintParameters.ShowCompanyNameOnLabels)
                    {
                        g.DrawLine(pen, LEFT_OFFSET, _horizontalLinesVerticalOffset, LINE_WIDTH, _horizontalLinesVerticalOffset);
                    }

                    for (int i = 0; i < 7; i++)
                    {
                        Track(_horizontalLinesVerticalOffset += LINE_HEIGHT);
                    }

                    if (PrintParameters.ShowCompanyNameOnLabels)
                    {
                        g.DrawImage(GetWorkshopImage(), -225, -260, 93, 92);

                        if (!string.IsNullOrEmpty(PrintParameters.WorkshopName))
                        {
                            DrawSpacedText(g, string.Format(Resources.TXT_LABEL_CUSTOMER_NAME, PrintParameters.WorkshopName), brush, LargeFont, new PointF(-125, -243));
                        }
                        if (!string.IsNullOrEmpty(PrintParameters.PhoneNumber))
                        {
                            DrawSpacedText(g, string.Format(Resources.TXT_LABEL_CUSTOMER_PHONE_NUMBER, PrintParameters.PhoneNumber), brush, new PointF(-125, -200));
                        }
                    }

                    DrawSpacedText(g, GetDocumentType(PrintParameters.DocumentType), brush, new PointF(LEFT_OFFSET, _textVerticalOffset));
                    DrawSpacedText(g, Resources.TXT_DATE_OF_CALIBRATION, brush, new PointF(TEXT_SECONDARY_LEFT_OFFSET - 12, _textVerticalOffset));
                    DrawRectangle(g, TEXT_SECONDARY_LEFT_OFFSET - 10, _textVerticalOffset, 205, 70);
                    DrawSpacedText(g, GetCalibrationTime(PrintParameters.CalibrationTime), brush, new PointF(TEXT_SECONDARY_LEFT_OFFSET - 12, _textVerticalOffset + TEXT_HEIGHT));

                    DrawSpacedText(g, string.Format(Resources.TXT_LABEL_K_FACTOR, PrintParameters.KFactor), brush, new PointF(LEFT_OFFSET, _textVerticalOffset += TEXT_HEIGHT));

                    var wFactorVerticalOffset = _textVerticalOffset += TEXT_HEIGHT;
                    DrawSpacedText(g, string.Format(Resources.TXT_LABEL_W_FACTOR, PrintParameters.WFactor), brush, new PointF(LEFT_OFFSET, wFactorVerticalOffset));

                    DrawSpacedText(g, string.Format(Resources.TXT_LABEL_L_FACTOR, PrintParameters.LFactor), brush, new PointF(LEFT_OFFSET, _textVerticalOffset           += TEXT_HEIGHT));
                    DrawSpacedText(g, string.Format(Resources.TXT_LABEL_VIN, PrintParameters.VIN), brush, new PointF(LEFT_OFFSET, _textVerticalOffset                    += TEXT_HEIGHT));
                    DrawSpacedText(g, string.Format(Resources.TXT_LABEL_SERIAL_NUMBER, PrintParameters.SerialNumber), brush, new PointF(LEFT_OFFSET, _textVerticalOffset += TEXT_HEIGHT));
                    DrawSpacedText(g, string.Format(Resources.TXT_LABEL_SEAL_NUMBER, PrintParameters.SealNumber), brush, new PointF(TEXT_SECONDARY_LEFT_OFFSET, _textVerticalOffset));
                    DrawSpacedText(g, string.Format(Resources.TXT_LABEL_TYRE_SIZE, PrintParameters.TyreSize), brush, new PointF(LEFT_OFFSET, _textVerticalOffset += TEXT_HEIGHT));

                    DrawSpacedText(g, GetCompanyName(), brush, new PointF(LEFT_OFFSET, _textVerticalOffset += TEXT_HEIGHT));

                    if (!string.IsNullOrEmpty(PrintParameters.LicenseKey) && PrintParameters.ExpirationDate >= DateTime.Now.Date)
                    {
                        DrawSpacedText(g, PrintParameters.Address1 ?? string.Empty, brush, new PointF(LEFT_OFFSET, Track(_textVerticalOffset += TEXT_HEIGHT)));    //address 1
                        DrawSpacedText(g, PrintParameters.Town ?? string.Empty, brush, new PointF(LEFT_OFFSET, Track((_textVerticalOffset += TEXT_HEIGHT) - 15))); //town
                        DrawSpacedText(g, PrintParameters.PostCode ?? string.Empty, brush, new PointF(LEFT_OFFSET, (_textVerticalOffset += TEXT_HEIGHT) - 30));    //post code
                    }
                    else
                    {
                        DrawSpacedText(g, Resources.TXT_DEMO, brush, new PointF(LEFT_OFFSET, Track(_textVerticalOffset += TEXT_HEIGHT)));        //address 1
                        DrawSpacedText(g, Resources.TXT_DEMO, brush, new PointF(LEFT_OFFSET, Track((_textVerticalOffset += TEXT_HEIGHT) - 15))); //town
                        DrawSpacedText(g, Resources.TXT_DEMO, brush, new PointF(LEFT_OFFSET, (_textVerticalOffset += TEXT_HEIGHT) - 30));        //post code
                    }

                    g.Flush();
                }

                bitmap.Save(Path.Combine(PrintParameters.TemporaryDirectory, "label.bmp"));
                PrinterSettings.PrinterName = PrintParameters.DefaultLabelPrinter;
                PrinterSettings.Copies      = (short)PrintParameters.LabelNumberOfCopies;

                Print();
            }