Печать на рулонной бумаге
Я использую С# с Winforms. Я пытаюсь распечатать счета на бумажном рулоне. Ширина бумаги составляет 3 дюйма, но длина бумаги динамическая (ее рулонная бумага). Длина зависит от количества элементов в списке. Например. в покупке, если продано 100 предметов, тогда это будет довольно длинный рулон, а для одного купленного предмета он будет иметь небольшую длину.
Когда я печатаю отчет, после конечного задания принтер извлекает последнюю страницу больше, чем мне нужно. Он извлекает бумагу до размера A4. Я хочу напечатать необходимые строки, а затем прекратить печать.
Я использую рулон бумаги, а не A4 или A3 и принтер Epson LQ-300 + II.
Чтобы быть более конкретным, печать всегда выполняется для единиц размера страницы. Если я установил страницу в 3in x 8in, тогда я всегда получаю распечатку с кратным 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;
}
Ответы
Ответ 1
Вы пробовали использовать страницу, которая длится только "одна строка"?
Опустите верхнюю и нижнюю границы, и вы можете печатать без остановок.
Теперь добавьте бит (так что страница может быть оторвана) и извлеките это.
Попробуйте следующее:
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
Ответ 2
Вы также можете настроить размер бумаги на лету. Меньше работы, чтобы сделать это на одну строку на страницу, но я бы предположил, что это создаст более приятный предварительный просмотр, если у кого-нибудь будет причина сделать это:
printdoc.DefaultPageSettings.PaperSize.Height += lineheight;
Ответ 3
Вот как вы можете определить собственный размер бумаги и использовать его в своем отчете.
Откройте папку принтера (с панели управления).
Откройте Свойства сервера из меню файла. Он откроет диалоговое окно Принтер и серверные свойства.
Выберите "Проверить" Создать новую форму
Укажите ширину ширины страницы. Я предлагаю вам сделать ваш рост 3 дюйма.
Теперь нажмите кнопку Сохранить форму.
Ваша пользовательская страница готова.
установите этот документ как формат бумаги по умолчанию как в отчете, так и в свойствах принтера.
Теперь вам хорошо идти.
Ответ 4
Вы также можете использовать опцию предварительного просмотра печати для завершения этого процесса.
// 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;
}