Как использовать полную длину печати на термобумаге в C #? - PullRequest
0 голосов
/ 22 марта 2019

В настоящее время я использую нестандартный термопринтер для печати чека заказа.Приведя пример, моя выходная квитанция в настоящее время выглядит ниже, которую я извлекаю из здесь : -

enter image description here

Я сейчас хочу использоватьвся область ширины печати.Таким образом, это будет как показано ниже: -

enter image description here

Я видел одного из наших клиентов, использующих тот же принтер, но результат печати имеет полную печать в качестве второгоimage.

Что можно сделать, чтобы печать имела полную ширину бумаги?

Ниже показано, как печатать, но с прямой линией, чтобы иметь зазоркак первое изображение: -

struct PrintProperty
{
    public RectangleF pageBounds { get; set; }
    public RectangleF marginBounds { get; set; }
    public RectangleF printableArea { get; set; }
    public float availableWidth { get; set; }
}
static PrintProperty PrtProp { get; set; }
private static void DefinePageSettings(PrintPageEventArgs e)
{
    try
    {
        PrinterSettings settings;
        foreach (var printer in PrinterSettings.InstalledPrinters)
        {
            settings = new PrinterSettings();
            settings.PrinterName = printer.ToString();
            if (settings.PrinterName.Contains("CUSTOM TG2480-H"))
            {
                if (!settings.IsDefaultPrinter)
                {
                    var printerQuery = new ManagementObjectSearcher("SELECT * from Win32_Printer");
                    foreach (var printers in printerQuery.Get())
                    {
                        var name = printers.GetPropertyValue("Name");
                        var status = printers.GetPropertyValue("Status");
                        var isDefault = printers.GetPropertyValue("Default");
                        var isNetworkPrinter = printers.GetPropertyValue("Network");
                        if (name.ToString().Contains("CUSTOM TG2480-H"))
                        {
                            SetPrinterAsDefault.SetDefaultPrinter(name.ToString());
                            LogEvents($"Change default printer to: {"CUSTOM TG2480-H"} ", System.Diagnostics.EventLogEntryType.Information);
                        }
                    }
                }
                else
                {
                    LogEvents($"{PageTitle} Default printer: {SelectedPrinter} ", System.Diagnostics.EventLogEntryType.Information);
                }
            }
        }

        PageSettings page = PrinterUtils.GetPrinterPageInfo();
        PrintProperty prop = new PrintProperty();
        prop.marginBounds = e.MarginBounds;
        prop.pageBounds = e.PageBounds;
        prop.printableArea = e.PageSettings.PrintableArea;
        prop.availableWidth = e.PageSettings.PrintableArea.Width;
        PrtProp = prop;

    }
    catch (Exception ex)
    {
        string error = $"Exception on define page settings. Message: {ex.Message}. StackTrace: {ex.StackTrace}";
        LogEvents(error, System.Diagnostics.EventLogEntryType.Error);
    }
}

private void StartPrint(PrintPageEventArgs e)
{
    try
    {
        DefinePageSettings(e);
        PrinterConfig.ReceiptFontProperties PrintFont = default(PrinterConfig.ReceiptFontProperties);
        PrintFont.FontFamily = "Font family from settings file";
        PrintFont.FontSize = "Font size from settings file";
        PrintFont.FontBold = "Is Font bold  from settings file";
        PrintFont.FontItalic = "Is Font italic from settings file";
        PrintFont.FontUnderline = "Is Font underline from settings file";
        PrintFont.FontStrikeout = "Is Font strikeout from settings file";
        PrintFont.FontAlignment = "Font alignment from settings file";
        PrintStraightLine(e.Graphics, PrintFont, "=");
    }
    catch (Exception ex)
    {
        string error = $"Exception on start print receipt. Message: {ex.Message}. StackTrace: {ex.StackTrace}";
        LogEvents(error, System.Diagnostics.EventLogEntryType.Error);
    }
}
protected static void PrintStraightLine(Graphics MyGraphic, PrinterConfig.ReceiptFontProperties FontInfo, string strText)
{
    Font PrintedFontProp = new Font(FontInfo.FontFamily, FontInfo.FontSize);
    Brush MyBrush = new SolidBrush(Color.Black);
    StringFormat MyStringFormat = new StringFormat();
    if (FontInfo.FontBold)
    {
        PrintedFontProp = new Font(PrintedFontProp, FontStyle.Bold);
    }
    if (FontInfo.FontItalic)
    {
        PrintedFontProp = new Font(PrintedFontProp, FontStyle.Italic);
    }
    if (FontInfo.FontUnderline)
    {
        PrintedFontProp = new Font(PrintedFontProp, FontStyle.Underline);
    }
    if (FontInfo.FontStrikeout)
    {
        PrintedFontProp = new Font(PrintedFontProp, FontStyle.Strikeout);
    }

    if (FontInfo.FontAlignment == StringAlignment.Center) //center
    {
        MyStringFormat.Alignment = StringAlignment.Center;
    }
    else if (FontInfo.FontAlignment == StringAlignment.Near) //left
    {
        MyStringFormat.Alignment = StringAlignment.Near;
    }
    else if (FontInfo.FontAlignment == StringAlignment.Far) //right
    {
        MyStringFormat.Alignment = StringAlignment.Far;
    }

    SizeF MeasureString = new SizeF();
    Size MeasureText = new Size();
    MeasureString = MyGraphic.MeasureString(strText, PrintedFontProp);
    MeasureText = TextRenderer.MeasureText(strText, PrintedFontProp, new Size((int)MeasureString.Width, (int)MeasureString.Height), System.Windows.Forms.TextFormatFlags.Default);
    Rectangle MyRect = new Rectangle(0, coordinateY, (int)PrtProp.availableWidth, MeasureText.Height);
    MyGraphic.DrawString(strText, PrintedFontProp, MyBrush, MyRect, MyStringFormat);

    SetCurrentY(PrintedFontProp.Height);
}

Я установил его динамически, потому что пользователь хочет изменить шрифт, и я должен указать столбец, чтобы быть точным [Количество, Имя, Цена] для деталей и обрезать длинный текст илинапечатайте его многострочно, как указано в файле настроек.

* MeasureText и MeasureStirng используют для управления каждым размером печатаемого символа, чтобы он не перекрывался с деталями печати. ​​

...