EPSON LQ-350 — управление непрерывной печатью с помощью кода C# для печати построчно и предотвращения подачи страницыC#

Место общения программистов C#
Anonymous
EPSON LQ-350 — управление непрерывной печатью с помощью кода C# для печати построчно и предотвращения подачи страницы

Сообщение Anonymous »

Сценарий использования: извлекать простые строковые сообщения из очереди и печатать их построчно на бумаге, подаваемой трактором, без перевода страницы после печати каждого сообщения. Текущее решение (в коде ниже) печатает одну строку, а затем автоматически продвигает бумагу к началу следующей страницы перед печатью следующей строки.
Это принтер 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

Вернуться в «C#»