2010-12-06 4 views
24

Я использую C# с 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; 
     } 
+5

В чем Ваш вопрос? Вы должны просто продолжить печать, пока не закончите. Тогда вы закончите. Это преимущество рулонной бумаги. – 2010-12-06 10:52:28

+0

+1, просто продолжайте рисовать, пока не закончите, и закончите с заявлением о разрезании бумаги. Я использовал это с помощью GDI, без опыта с отчетами Crystal – Anton 2010-12-06 10:56:01

ответ

15

Вы пробовали использовать страницу, которая только «одна строка» долго?

Опустите верхнюю и нижнюю границу, и вы можете печатать без остановок.

Теперь добавьте немного (так что страница может быть оторвана) и извлеките это.

Попробуйте это:

  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

+0

Учитывая ограничения, это кажется наиболее логичным ответом. – NotMe 2010-12-10 15:04:05

+0

Как определить единую линейную бумагу? Я видел только типовые размеры в настройках принтера. – Thunder 2010-12-13 05:44:29

4

Вы также можете настроить размер бумаги на лету. Меньше работы, чтобы сделать это по одной строке на странице, но я предположил бы, что это будет производить более хороший предварительный просмотр печати, если бы кто-нибудь есть причины, чтобы сделать это:

printdoc.DefaultPageSettings.PaperSize.Height += lineheight; 
0

Вот как вы можете определить пользовательский размер бумаги и используйте его в своем отчете.

Открыть папку принтера (с панели управления).

Открыть Свойства сервера из меню файла. Он откроет Свойства принтера и сервера Диалоговое окно.

Выберите Проверить Создать новую форму

Укажите высоту ширины страницы. Я предлагаю вам сделать ваш рост 3 дюйма.

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

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

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

Теперь вам хорошо.

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; 
} 
Смежные вопросы