Распечатать документ, игнорировать подачу страницы для термопринтеров
Есть ли способ игнорировать подачу страницы для термопринтеров при использовании PrintDocument
? С точки зрения печати "квитанции", если на нем много элементов (100), принтер всегда помещает пустое пространство между элементами, где он считает, что должна быть подача страницы.
Моя проблема в том, что нет страниц для подачи, это непрерывный рулон бумаги.
В драйверах принтера щелкните правой кнопкой мыши на принтере -> Настройки принтера -> Вкладка "Параметры документа"; Я установил Источник бумаги на Page[NoFeed,Cut]
а также Document[NoFeed,Cut]
но у меня все та же проблема.
Я также попытался установить "Размер бумаги, определяемый пользователем", но кажется, что драйверы EPSON не поддерживают это. Моя идея заключалась в том, что я просто установил бы высоту страницы очень долго. Изменить Я попытался настроить принтер на использование формы длиной 3276,00 см, но у меня все еще остается та же проблема. Я также попытался настроить принтер как универсальный принтер, и все еще вижу ту же проблему
Вот код, который я использую, возможно, есть способ сделать это на лету, в коде?
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
int charactersOnPage = 0;
int linesPerPage = 0;
// Sets the value of charactersOnPage to the number of characters
// of stringToPrint that will fit within the bounds of the page.
e.Graphics.MeasureString(pageString, this.Font,
e.MarginBounds.Size, StringFormat.GenericTypographic,
out charactersOnPage, out linesPerPage);
// Draws the string within the bounds of the page
e.Graphics.DrawString(pageString, this.Font, Brushes.Black,
e.MarginBounds, StringFormat.GenericTypographic);
// Remove the portion of the string that has been printed.
pageString = pageString.Substring(charactersOnPage);
// Check to see if more pages are to be printed.
e.HasMorePages = (pageString.Length > 0);
}
private void metroButton2_Click(object sender, EventArgs e)
{
for (int i = 0; i < 200; i++)
{
pageString += "Salesitem " + i.ToString() + " \n";
}
bool online = printDocument1.PrinterSettings.IsValid;
if (online)
printDocument1.Print();
else
MessageBox.Show("Printer Offline");
}
Большое спасибо за уделенное время. Я видел несколько похожих вопросов по SO, но большинство из них, которые я могу понять, основаны на использовании драйвера для решения этой проблемы. Это не применимо для меня, потому что у меня есть два требования от моего босса, их драйвер для моего принтера, и более старые модели не поддерживают создание нестандартных размеров страниц непосредственно из драйвера, и, похоже, не работают для отключения подачи страниц. Мне нужен способ решить эту проблему с помощью кода, если это возможно.
Изменить: я чувствую, что я попробовал все. Я попытался отправить данные на принтер порциями, но проблема в том, что каждый раз printDocument1_PrintPage
выполняется путем проверки e.HasMorePages = (pageString.Length > 0);
команда подачи страницы или перевода строки отправляется на принтер (TMT 88IV, TMT 88II), даже если в драйвере он установлен на рулон бумаги.
Я также пытался использовать нестандартный тип бумаги, начиная с небольшой высоты бумаги и динамически увеличивая ее до каждого раза, когда я рисую линию, но, тем не менее, это похоже на высоту бумаги, заданную в коде и драйвером принтера (это устанавливается в драйвере длиной 3276,00 см), игнорируется при каждом возникновении события страницы.
Единственный способ, которым я смог обойти это, - использовать класс RawPrinterHelper и сам отправлять команды печати. Да, это легко, но я бы хотел иметь возможность легко использовать функции.net для шрифтов, печати изображений, мониторинга очереди и т. Д. Обидно, буквально единственное, что меня останавливает, - это огромный интервал, автоматически вставляемый в непрерывную рулонную бумагу на чеках, превышающих стандартную высоту страницы.