winform form diseƱo autosizemode c# winforms graphics printing dpi

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); }