В настоящее время я использую нестандартный термопринтер для печати чека заказа.Приведя пример, моя выходная квитанция в настоящее время выглядит ниже, которую я извлекаю из здесь : -
![enter image description here](https://i.stack.imgur.com/ajLOe.jpg)
Я сейчас хочу использоватьвся область ширины печати.Таким образом, это будет как показано ниже: -
![enter image description here](https://i.stack.imgur.com/a8y5j.jpg)
Я видел одного из наших клиентов, использующих тот же принтер, но результат печати имеет полную печать в качестве второго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
используют для управления каждым размером печатаемого символа, чтобы он не перекрывался с деталями печати.