Печать на рулонной бумаге

Я использую 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 дюйма.

Теперь нажмите на кнопку Сохранить форму.

Ваша пользовательская страница готова.

установите этот размер бумаги по умолчанию как в отчете, так и в свойствах принтера.

Теперь тебе пора.

Другие вопросы по тегам