Печать на рулонной бумаге
Я использую C# с Winforms. Я пытаюсь распечатать счета на бумажном рулоне. Ширина бумаги 3 дюйма, но длина бумаги динамическая (это рулонная бумага). Длина зависит от того, сколько предметов есть в списке. Например, при покупке 100 проданных товаров это будет довольно длинный бросок, в то время как при покупке одного предмета он будет иметь небольшую длину.
Когда я печатаю отчет, после завершения задания принтер извлекает последнюю страницу больше, чем мне нужно. Она выталкивает бумагу формата А4. Я хочу напечатать необходимые строки, а затем прекратить печать. Я использую рулон бумаги, а не A4 или A3 и принтер Epson LQ-300 + II.
Чтобы быть более точным, печать всегда выполняется для блоков размером с страницу. Если я устанавливаю страницу размером 3 на 8 дюймов, то всегда получаю распечатку, кратную длине 8 дюймов. Если у меня есть счет на 9 дюймов для печати, я получаю распечатку на 16 дюймов, тратя впустую 7 дюймов бумаги. Как я могу печатать с последней страницей только столько, сколько нужно?
Вот код:
private void printDoc_PrintPage(Object sender, PrintPageEventArgs e)
{
Font printFont = new Font("Courier New", 12);
int y = 15;
e.Graphics.DrawString("a Line", printFont, Brushes.Black, 0, y); y = y + 20;
e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 25;
e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 35;
e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 45;
}
4 ответа
Вы пытались использовать страницу длиной всего в одну строку?
Опустите верхнюю и нижнюю границу, и вы можете печатать без остановки.
Теперь добавьте немного (чтобы страница могла быть оборвана) и удалите его.
Попробуй это:
PaperSize pkCustomSize1 = new PaperSize("First custom size", 100, 200);
printDoc.DefaultPageSettings.PaperSize = pkCustomSize1
Смотрите: http://msdn.microsoft.com/en-us/library/system.drawing.printing.pagesettings.papersize.aspx
Вы также можете настроить размер бумаги на лету. Меньше работы, чтобы сделать это по одной строке на страницу, но я полагаю, что если бы у кого-то была причина сделать это, то получился бы лучший предварительный просмотр:
printdoc.DefaultPageSettings.PaperSize.Height += lineheight;
Я использую VKP80II и устанавливаю pagesettings.papersize на:
PaperSize PaperRoll= new PaperSize("Paper Roll", 300, 0);
автоматически он печатает точную длину, которая ему нужна, без фактического указания длины
Вы также можете использовать опцию предварительного просмотра для завершения этого процесса.
// This is for the print preview event
private void printPreviewDialog1_Load(object sender, EventArgs e)
{
int j = 0;
z = 185;
while (j < dataGridView1.Rows.Count)
{
j += 1;
z += 30;
}
z += 60;
PaperSize pkCustomSize1 = new PaperSize("First custom size", 350, z);
printDocument1.DefaultPageSettings.PaperSize = pkCustomSize1;
}
// This is the loop for generating print Document
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
int i = 0; //For Gridview Row Count
int sno = 1; //For Grid Serial Number
e.Graphics.DrawString(
"HEADING",
new Font("Calibri", 20, FontStyle.Bold),
Brushes.Black,
new Point(100, 5));
e.Graphics.DrawString(
"Address",
new Font("Calibri", 12, FontStyle.Bold),
Brushes.Black,
new Point(75, 35));
int y = 185; //For Grid y axis start to print
while (i < dataGridView1.Rows.Count)
{
e.Graphics.DrawString(
sno.ToString(),
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(10, y)); //For Serial Number
e.Graphics.DrawString(
dataGridView1.Rows[i].Cells[1].FormattedValue.ToString(),
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(240, y));
//This is for Trim content to next line
Graphics df1 = e.Graphics;
SizeF ef1 = df1.MeasureString(
dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(),
new Font(new FontFamily("Calibri"), 12F, FontStyle.Bold),
200); //160
df1.DrawString(
dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(),
new Font(new FontFamily("Calibri"), 12F, FontStyle.Bold),
Brushes.Black,
new RectangleF(new PointF(60.0F, y), ef1), //350.0
StringFormat.GenericTypographic);
i += 1;
sno += 1;
y += 30;
}
e.Graphics.DrawString(
"------------------------------------------------------------------------------------",
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(0, y));
e.Graphics.DrawString(
"Total Amount-:" + TotalAmnt_txt.Text,
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(150, y+=20));
e.Graphics.DrawString(
"------------------------------------------------------------------------------------",
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(0, y+=20));
e.Graphics.DrawString(
"***Care For You ****",
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(150, y += 20));
i = 0;
sno = 1;
}
Вот как вы можете определить нестандартный размер бумаги и использовать его в своем отчете.
Откройте папку принтера (из панели управления).
Откройте " Свойства сервера" в меню "Файл". Откроется диалоговое окно " Свойства принтера и сервера ".
Выберите Проверить Создать новую форму
Укажите ширину страницы по высоте. Я предлагаю вам сделать ваш рост 3 дюйма.
Теперь нажмите на кнопку Сохранить форму.
Ваша пользовательская страница готова.
установите этот размер бумаги по умолчанию как в отчете, так и в свойствах принтера.
Теперь тебе пора.