c# - form - Imprimir un panel en una impresora
resize c# form (1)
Has configurado las cosas casi bien.
Lo único que falta es establecer la resolución para el mapa de bits.
Si no lo hace, se copiará de la pantalla, lo que generalmente no funcionará bien con la impresora. A menudo resulta en una producción demasiado pequeña, pero como ya has configurado los Graphics
para usar milímetros, necesitamos adaptar el mapa de bits para entender a qué se supone que se deben traducir los píxeles.
Asumiendo píxeles cuadráticos intente esto:
int pixelsWidth = 300; // 300 pixels= ~8cm
int pixelsHeight = 150; // 150 pixels= ~4cm
Bitmap bmp = new Bitmap(pixelsWidth, pixelsHeight);
//..
float targetWidthInInches = 80f / 25.4f;
float dpi = 1f * pixelsWidth / targetWidthInInches;
bmp.SetResolution(dpi, dpi);
Estoy tratando de imprimir un panel (con su contenido) a una impresora. Vi diferentes publicaciones en la red, pero no puedo imprimir el panel y obtener el tamaño correcto. El panel se imprime muy grande y no como se esperaba.
Por ejemplo, quiero imprimir un panel y obtener como tamaño de salida 80 mm X 40 mm:
private void Print_Click(object sender, EventArgs e)
{
int pixelsWidth = 300; // 300 pixels= ~8cm
int pixelsHeight = 150; // 150 pixels= ~4cm
panelLabel.Size = new Size(pixelsWidth,pixelsHeight);
PrintPanel();
}
private void PrintPanel()
{
System.Drawing.Printing.PrintDocument doc = new PrintDocument();
doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
doc.Print();
}
private void doc_PrintPage(object sender, PrintPageEventArgs e)
{
Bitmap bmp = new Bitmap(panelLabel.Width, panelLabel.Height);
panelLabel.DrawToBitmap(bmp, new Rectangle(0, 0, panelLabel.Width, panelLabel.Height));
RectangleF bounds = e.PageSettings.PrintableArea;
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
e.Graphics.DrawImage(bmp, bounds.Left, bounds.Top, bounds.Width, bounds.Height);
}