99 lines
3.0 KiB
C#
99 lines
3.0 KiB
C#
///
|
|
/// Copyright (c) 2018 Sensus Slovensko a.s.
|
|
///
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Drawing.Printing;
|
|
using System.IO;
|
|
using Config.Entities;
|
|
using Results.Resources;
|
|
|
|
namespace Results.Output.Printers.Label
|
|
{
|
|
public class LabelPrintDocument : PrintersCommon
|
|
{
|
|
/// Size of the printed area without margins, after taking into account 'pageOrientation'
|
|
readonly int printHeight;
|
|
readonly int printWidth;
|
|
|
|
/// Selected font
|
|
readonly Font font;
|
|
|
|
/// Data to print
|
|
Results.Entities.Batch batch;
|
|
LabelPrinterCfg cfg;
|
|
Results.Entities.WaterMeter wm;
|
|
|
|
/// Items to print
|
|
IList<WMeterRsltItemSpec> itemsToPrint;
|
|
|
|
/// <summary>
|
|
/// Constructor
|
|
/// </summary>
|
|
/// <param name="textToPrint">Text to be printed</param>
|
|
public LabelPrintDocument(Results.Entities.Batch batch, LabelPrinterCfg cfg, Results.Entities.WaterMeter wm, string documentName)
|
|
{
|
|
DocumentName = documentName;
|
|
|
|
this.batch = batch;
|
|
this.cfg = cfg;
|
|
this.wm = wm;
|
|
this.itemsToPrint = Results.WMeterRsltItemSpec.FromStrArray(cfg.ItemsToPrint);
|
|
|
|
/// Initialize fonts
|
|
font = new Font((cfg.FontFamily != null ? cfg.FontFamily : "Arial"),
|
|
(cfg.FontSize > 0 ? cfg.FontSize : 10),
|
|
(FontStyle)cfg.FontStyle);
|
|
|
|
/// Set print area size and margins (in dots using 100 dpi)
|
|
DefaultPageSettings.Landscape = (cfg.PageOrientation == PageOrientation.Landscape);
|
|
///
|
|
printHeight = cfg.PaperHeight;
|
|
printWidth = cfg.PaperWidth;
|
|
}
|
|
|
|
/// <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);
|
|
|
|
if (!string.IsNullOrEmpty(cfg.Template))
|
|
{
|
|
string templatePath = Path.Combine("C:\\TBF\\Templates\\", cfg.Template);
|
|
if (File.Exists(templatePath))
|
|
{
|
|
e.Graphics.DrawImage(new Bitmap(Image.FromFile(templatePath), printWidth, printHeight), new Rectangle(0, 0, printWidth, printHeight));
|
|
}
|
|
}
|
|
|
|
foreach (var item in itemsToPrint)
|
|
{
|
|
string[] coords = item.Caption.Split(new char[] { ';' });
|
|
int x, y;
|
|
if (coords.Length >= 2 && int.TryParse(coords[0].Trim(new char[] { ' ' }), out x)
|
|
&& int.TryParse(coords[1].Trim(new char[] { ' ' }), out y))
|
|
{
|
|
RectangleF printArea = new RectangleF(x, y, printWidth, printHeight);
|
|
e.Graphics.DrawString(item.Print(wm), this.font, Brushes.Black, printArea);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|