c# - termica - cual es el tamaño de un ticket
Impresión en rollo de papel (4)
Estoy usando C # con Winforms. Estoy tratando de imprimir billetes en un rollo de papel. El ancho del papel es de 3 pulgadas, pero la longitud del papel es dinámica (es un rollo de papel). La longitud depende de cuántos elementos hay en la lista. Por ejemplo, en una compra, si hay 100 artículos vendidos, será un rollo bastante largo, mientras que para un solo artículo comprado será de poca longitud.
Cuando imprimo el informe, después del trabajo final, la impresora expulsa la última página más de lo que necesito. Expulsa papel de tamaño A4. Quiero imprimir las líneas requeridas, luego dejar 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 impresión que es un múltiplo de 8 pulgadas de largo. Si tengo una factura de 9 pulgadas para imprimir, termino con una impresión de 16 pulgadas, desperdiciando 7 pulgadas de papel. ¿Cómo puedo imprimir con la última página tan larga como 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;
}
¿Has intentado usar una página que solo tiene una "línea"?
Omita los bordes superior e inferior y podrá imprimir sin parar.
Ahora agregue un poco (para que la página se pueda arrancar) y expulse eso.
Prueba esto:
PaperSize pkCustomSize1 = new PaperSize("First custom size", 100, 200);
printDoc.DefaultPageSettings.PaperSize = pkCustomSize1
Consulte: http://msdn.microsoft.com/en-us/library/system.drawing.printing.pagesettings.papersize.aspx
Aquí es cómo puede definir un tamaño de papel personalizado y utilizarlo en su informe.
Abra la carpeta de la impresora (desde el Panel de control).
Abra Propiedades del servidor desde el menú de archivo. Se abrirá el cuadro de diálogo Propiedades de la impresora y el servidor .
Seleccionar cheque Crear un nuevo formulario
Especifique la altura del ancho de la página. Te sugiero que hagas tu altura 3 pulgadas.
Ahora haga clic en el botón Guardar formulario .
Tu 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 eres bueno para irte.
También puede ajustar el tamaño del papel sobre la marcha. Menos trabajo para hacerlo una línea por página, pero me imagino que esto produciría una vista previa de impresión más agradable si alguien tuviera motivos para hacerlo:
printdoc.DefaultPageSettings.PaperSize.Height += lineheight;
También puede utilizar 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;
}