2011-10-11 12 views
5

Jak mogę przekonwertować dane wprowadzone przez użytkownika z milimetra na piksele, aby wydrukować je na właściwej stronie?Drukuj w .NET - Konwersja z milimetra na piksel

używam następujący kod:

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 dostał wartość "9,5" i edtBorderTop.Text wartość "21,5". Te wartości to milimetry. Jeśli sprawdzę dane wyjściowe za pomocą tego kodu:

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

Wyświetla obraz prawie na środku strony. A Przykład obliczenia:

mmToPixel (float.Parse (edtBorderLeft.Text) DPix) edtBorderLeft.Text = "9,5" DPix = 600; zwraca: 224

Jak mogę obliczyć właściwy punkt dla drukowanego obrazu?

+0

spróbuj użyć TextRender.MeasureText(); i zobacz, czy to może coś w tym przypadku zrobić. – Burimi

+0

Dzięki za pomoc. Znalazłem inne rozwiązanie. Proszę spojrzeć na moją odpowiedź. – hitzi

Odpowiedz

6

Znalazłem rozwiązanie. Możesz zmienić jednostkę strony za pomocą następującego kodu. Więc nie potrzebują nawrócenia:

e.Graphics.PageUnit = GraphicsUnit.Millimeter; 

lub

e.Graphics.PageUnit = GraphicsUnit.Pixel; 

i mogę użyć powyższy kod.

4

Wystarczy dodać trochę wyjaśnienia. Domyślnie Graphics.PageUhit jest ustawiony na "Display". W przypadku wyświetlacza ekranowego oznacza to zwykle 96 pikseli na cal, dla drukarki jest to 100 punktów na cal. Ta informacja jest pochowana w MSDN, ale jest trudna do znalezienia.

W związku z tym, zamiast drukarki dpi/dpiY można założyć wartość 100, ale prawdopodobnie bezpieczniej jest ustawić jednostki na milimetry.