2010-12-06 40 views
24

Estoy usando C# con Winforms. Estoy tratando de imprimir facturas en un rollo de papel. El ancho del papel es de 3 pulgadas, pero la longitud del papel es dinámico (es un rollo de papel). La duración depende de cuántos elementos hay en la lista. P.ej. en una compra si hay 100 artículos vendidos, será bastante largo, mientras que para un solo artículo comprado será de poca longitud.Impresión en rollo de papel

Cuando imprimo el informe, después del trabajo final, la impresora expulsa la última página más de lo que necesito. Expulsa el papel siempre que tenga tamaño A4. Quiero imprimir las líneas requeridas, luego dejo de imprimir. Uso un rollo de papel, no A4 o A3 y una impresora Epson LQ-300 + II.

Para ser más específicos, la impresión siempre se realiza en unidades de tamaño de página. Si configuro la página para que sea de 3 pulgadas x 8 pulgadas, siempre termino con una copia impresa que es un múltiplo de 8 pulgadas de largo. Si tengo que imprimir una cuenta de 9 pulgadas, termino con una impresión de 16 pulgadas, desperdiciando 7 pulgadas de papel. ¿Cómo puedo imprimir con la última página solo por el tiempo que debe ser?

Aquí está el código:

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

¿Cuál es su pregunta? Deberías poder seguir imprimiendo hasta que termines. Entonces habrás terminado. Esa es la ventaja del rollo de papel. –

+0

+1, simplemente siga dibujando hasta que termine y termine con una frase para cortar el papel. Solía ​​hacer esto usando GDI, sin experiencia con los informes de Crystal – Anton

Respuesta

15

¿Ha intentado utilizar una página que es sólo "una línea" de largo?

Omita el borde superior e inferior, y puede imprimir sin parar.

Ahora agregue un poco (para que la página pueda ser arrancada) y expúlselo.

Prueba esto:

  PaperSize pkCustomSize1 = new PaperSize("First custom size", 100, 200); 

      printDoc.DefaultPageSettings.PaperSize = pkCustomSize1 

Ver: http://msdn.microsoft.com/en-us/library/system.drawing.printing.pagesettings.papersize.aspx

+0

Dadas las limitaciones, esta parece ser la respuesta más lógica. – NotMe

+0

¿Cómo podemos definir un solo papel de línea ?, he visto solo tamaños estándar en la configuración de la impresora. – Thunder

+0

Ver arriba ...... –

4

Usted puede también ajustar el tamaño del papel sobre la marcha. Menos trabajo para hacer que una línea por cada página, pero me imagino que esto produciría una vista previa de impresión más agradable si alguien fuera a tener motivos para hacerlo:

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

esta codificación no funciona para mí. en cuyo caso debo especificar esta codificación? .. utilicé en el evento de la página de impresión ... – Sathish

+0

Te gustaría hacer eso a medida que dibujas cada línea. Y desea comenzar con un tamaño de papel personalizado de una línea como lo sugirió la respuesta aceptada. La altura no se puede escribir para tamaños de papel estándar. –

0

Así es como se puede definir un tamaño de papel personalizado y Úselo en su informe.

Abra la carpeta de la impresora (desde el Panel de control).

Abrir Propiedades del servidor desde el menú de archivo. Se abrirá Propiedades de impresora y servidor Cuadro de diálogo.

Seleccione Comprobar crear una nueva forma

especificar la altura ancho de la página. Te sugiero que hagas tu altura 3 pulgadas.

Ahora haga clic en el botón Guardar formulario.

Su página personalizada está lista.

configure este papel como su tamaño de papel predeterminado tanto en el informe como en las propiedades de la impresora.

Ahora está listo para empezar.

+0

debería haber especificado al menos qué sistema operativo está usando para esto. –

0

También puede usar la opción de vista previa de impresión para completar este proceso.

// 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; 
} 
Cuestiones relacionadas