2011-10-11 2 views
5

사용자 입력을 밀리미터에서 픽셀로 변환하여 페이지의 올바른 위치에 인쇄하려면 어떻게해야합니까?인쇄용 .NET - 밀리미터에서 픽셀로 변환

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는 "9.5"및 edtBorderTop.Text "21,5"값의 값을 가지고 :

는 다음 코드를 사용합니다. 이 값은 밀리미터입니다. 이 코드로 출력을 확인하면 :

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

이미지가 페이지의 거의 중앙에 표시됩니다. 계산 예 :

mmToPixel (float.Parse (edtBorderLeft.Text) dpiX) edtBorderLeft.Text = "9.5" dpiX = 600; 은 다음을 반환합니다. 224

인쇄 된 이미지의 올바른 위치는 어떻게 계산합니까?

+0

TextRender.MeasureText()를 시도 하시겠습니까? 이 경우 뭔가 할 수 있는지 확인하십시오 – Burimi

+0

도움을 주셔서 감사합니다. 나는 또 다른 해결책을 찾았다. 제 대답을보세요. – hitzi

답변

6

해결책을 찾았습니다. 다음 코드를 사용하여 페이지 단위를 변경할 수 있습니다. 그래서 변환이 필요하지 않습니다 :

e.Graphics.PageUnit = GraphicsUnit.Millimeter; 

또는

e.Graphics.PageUnit = GraphicsUnit.Pixel; 

을 나는 위의 코드를 사용할 수 있습니다.

4

약간의 설명을 추가하십시오. 기본적으로 Graphics.PageUhit은 "Display"로 설정됩니다. 화면 표시의 경우 일반적으로 인치당 96 픽셀을 의미하며 프린터의 경우 인치당 100 도트입니다. 이 정보는 MSDN somehwere에 묻혀 있지만 찾기가 어렵습니다. 프린터에 따라서

대신 dpiX/dpiY를 사용하는 100의 값을 가정 할 수 있지만 밀리미터 단위를 설정하는 것이 더 안전하다.