none
Ayuda Imprimir Panel de formulario con mejor calidad. RRS feed

  • Pregunta

  • Hola amigos, 

    Estoy intentando imprimir un panel de un formulario y no consigo que me quede con buena calidad. El código que utilizo es este:

     	Panel panel = null;
            private PrintDocument DocumentoParaImprimir = new PrintDocument();
            private PrintPreviewDialog VistaPrevia = new PrintPreviewDialog();
    
            public ImprimeFormulario(Panel panel)
            {
                this.panel = panel;
                DocumentoParaImprimir.PrintPage +=new PrintPageEventHandler(DocumentoParaImprimir_PrintPage);
            }
    
            void DocumentoParaImprimir_PrintPage(object sender, PrintPageEventArgs e)
            {
                System.Drawing.Bitmap bmp = new Bitmap(this.panel.Width + 25, this.panel.Height, this.panel.CreateGraphics());
                this.panel.DrawToBitmap(bmp, new Rectangle(0, 0, this.panel.Width, this.panel.Height));
                RectangleF bounds = e.PageSettings.PrintableArea;
                float factor = ((float)bmp.Height / (float)bmp.Width);
                e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
                e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                e.Graphics.DrawImage(bmp, bounds.Left, bounds.Top, bounds.Width, factor * bounds.Width);
            }
            public void Imprime(string nombreFichero)
            {
                VistaPrevia.Document = DocumentoParaImprimir;
                VistaPrevia.Document.DocumentName = nombreFichero;
                VistaPrevia.ShowDialog();
            }
    

    Cómo podría mejorar la calidad de impresión?

    Muchas gracias

    miércoles, 6 de mayo de 2015 8:12

Todas las respuestas

  • Sospecho que el problema debe de estar en tu variable "bmp", que en el código que has puesto no se ve de dónde sale. Seguramente debe ser una captura de pantalla tomada con resolución de pantalla. Pero como la impresora tiene muchos más pixels por pulgada que la pantalla, en impresora se ve "grueso" y no queda con buena resolución, por mucho que intentes usar el "smoothing" y el "interpolation" para tratar de "inventar" unos pixels que no existen en la imagen.

    Me temo que el único remedio válido para que quede con calidad es prescindir de imprimir el panel de la pantalla, y en su lugar reproducir el mismo contenido del panel directamente con instrucciones de System.Drawing dentro del evento PrintPage (aunque esto suponga mucho más trabajo que copiar directamente el panel).

    miércoles, 6 de mayo de 2015 9:05
  • Gracias por tu respuesta. 

    Podrías indicarme algún enlace donde expliquen esto que comentas?


    miércoles, 6 de mayo de 2015 10:02
  • Bueno, puedes hacer una búsqueda en Internet con las palabras clave "system.drawing tutorial", y te encontrará múltiples tutoriales acerca del uso de System.Drawing.

    Y barriendo un poco hacia mis propios intereses, aprovecho para pasarte un enlace hacia un libro mío en el que hay un capítulo entero sobre el uso de System.Drawing (pero está escrito en inglés):

    http://www.campusmvp.es/catalogo/Product-.NET-Windows-Development---Everyday-Tips,-Tricks-Optimization-(PDF)_135.aspx

    miércoles, 6 de mayo de 2015 10:39
  • Muchas gracias de nuevo...

    S2

    miércoles, 6 de mayo de 2015 15:41