Это принтер EPSON LQ-350, установленный на компьютере под управлением Windows 10 с последней версией драйвера от производителя.
Размер бумаги для отрываемой страницы составляет 9,5 x 11 дюймов (включая отверстия трактора) или 8,5 x 11 дюймов (без трактора). отверстия).
Варианты, которые я уже пробовал:
- Пытался изменить параметры PaperSource и PaperSize в настройках DefaultPageSettings, но безрезультатно.
- Добавлено «HasMorePages = false», но это не мешает продолжению подачи страницы.
- Удалось уменьшить зазор до 3 см создав «Пользовательскую бумагу» в настройках печати принтера в настройках Windows, но это все равно тратит много места/бумаги. Минимальным рабочим вариантом было 3 см, наименьшее доступное значение — 2,54 см, но оно печаталось неправильно.
- Создан принтер «Общий/Только текст» на порту LPT1, который использовал LQ350 посредством совместного использования и «сетевого использования», но столкнулся с теми же проблемами, и это не предоставляло никаких других полезных опций.
- Изменены настройки самого принтера, чтобы опция «Автоматическое отрывание» была «Вкл» (и «Длина страницы для трактора» была правильно установлена на 11 дюймов).
Прочитав руководство, я не увидел никакой пользы в включении параметра «Автоматическая подача строки» - в настоящее время он установлен на «Выкл».
Если PrintDocument/PrintPage не является вариантом для этой ситуации, какие еще есть варианты? Возможно, драйвер WinSpool (но он также использует StartDocPrinter/StartPagePrinter)?
private Font printFont;
private string stringToPrint;
private void ServicePrintQueue()
{
// Print all the messages in the queue.
while (this.printQueue.Count > 0)
{
stringToPrint = this.printQueue.Dequeue();
printFont = new Font("Arial", 10);
PrintDocument pd = new PrintDocument();
pd.PrinterSettings.PrinterName = this.printerSettings.PrinterName;
pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
//Testing options
//pd.DefaultPageSettings.PaperSource = new PaperSource() { RawKind = (int)PaperSourceKind.TractorFeed };
//pd.DefaultPageSettings.PaperSize = new PaperSize("Test", 800, 0);
//pd.DefaultPageSettings.PaperSize.Height = 25;
pd.Print();
}
//timer to run ServicePrintQueue() every second
this.timerServicePrintQueue.Start();
}
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
float yPos = 0;
int count = 0;
float leftMargin = 0;
float topMargin = ev.MarginBounds.Top;
yPos = topMargin + (count * printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString(stringToPrint, printFont, Brushes.Black, leftMargin, yPos, new StringFormat());
ev.HasMorePages = false;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ine-by-lin