2011-10-11 11 views
5

¿Cómo puedo convertir la entrada del usuario de milímetros a píxeles para que se imprima en la posición correcta de la página?Imprimir en .NET - Conversión de milímetro a píxel

uso el siguiente código:

private void document_PrintPage(object sender, PrintPageEventArgs e) 
{ 
    float dpiX = e.Graphics.DpiX; 
    float dpiY = e.Graphics.DpiY; 
    Point p = new Point(mmToPixel(float.Parse(edtBorderLeft.Text), dpiX), 
      mmToPixel(float.Parse(edtBorderTop.Text), dpiY)); 
    e.Graphics.DrawImage(testImage, p); 

} 

private int mmToPixel(float mm, float dpi) 
{ 
    return (int)Math.Round((mm/25.4) * dpi); 
} 

edtBorderLeft.Text tiene el valor de "9.5" y edtBorderTop.Text el valor de "21,5". Estos valores son milímetros. Si verifico la salida con este código:

private void printPage() 
    { 
     PrintDialog dialog = new PrintDialog(); 
     dialog.Document = document; 
     if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     { 
      PrintPreviewDialog preview = new PrintPreviewDialog(); 
      preview.Document = document; 
      preview.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; 
      preview.Show(); 
      //document.Print(); 
     }    
    } 

Muestra la imagen casi en el centro de la página. Un ejemplo de cálculo:

mmToPixel (float.Parse (edtBorderLeft.Text), dpiX) edtBorderLeft.Text = "9.5" dpiX = 600; devoluciones: 224

¿Cómo puedo calcular el punto correcto para la imagen impresa?

+0

probaría TextRender.MeasureText(); y ver si eso puede hacer algo en este caso – Burimi

+0

Gracias por su ayuda. Encontré otra solución. Por favor mira mi respuesta. – hitzi

Respuesta

6

Encontré una solución. Puede cambiar la unidad de página con el siguiente código. Así que no necesito una conversión:

e.Graphics.PageUnit = GraphicsUnit.Millimeter; 

o

e.Graphics.PageUnit = GraphicsUnit.Pixel; 

y puedo utilizar el código de seguridad.

4

Solo para agregar una pequeña explicación. Por defecto, Graphics.PageUhit está configurado en "Pantalla". Para una pantalla, esto generalmente significa 96 píxeles por pulgada, para una impresora es 100 puntos por pulgada. Esta información está enterrada en MSDN, pero es difícil de encontrar.

Por lo tanto, para una impresora, en lugar de usar dpiX/dpiY, podría suponer un valor de 100, pero probablemente sea más seguro configurar las unidades en milímetros.

Cuestiones relacionadas