2011-09-26 12 views
2

PrintDocument을 사용하여 파일 (이미지 파일)을 프린터로 인쇄하려고합니다.문제 인쇄 된 페이지에 맞게 이미지 크기 조정

이미지를 인쇄 할 때 전체 페이지 크기가되도록 이미지의 크기를 조정하므로 이미지가 약간 잘립니다. 페이지

With printSettings.DefaultPageSettings 
    Dim areaWidth As Single = .Bounds.Width - .Margins.Left - .Margins.Right 
    Dim areaHeight As Single = .Bounds.Height - .Margins.Top - .Margins.Bottom 
End With 

경계가 (A4) 1169x827이며 마진은 1137x795입니다 : 면적을 계산하기 위해 여백을 사용하여

는 EDIT 2

I 오전 사용 . 내 이미지 크기를 크기를 조정 한 후

는 1092x682이며 나는 그것을 그릴 다음 코드를 사용하고 있습니다 : e.Graphics.DrawImage(printBitmap, .Margins.Left, .Margins.Top)

성가신 일이 내가 PrintPreviewDialog로 인쇄 할 때 완벽하게 확장되고 있다는 것입니다하지만 난 똑같은 인쇄 할 때 실제 프린터에 맞지 않습니다.

EDIT 3

전체 코드는 this url 사용에서 찾을 수 있습니다 대부분의 개인 프린터는 할되지 않은 full bleed있는 페이지를 인쇄하고자하는 것 같은

Dim clsPrint As New clsPrinting 
    With clsPrint 
     .Landscape = True 
     .SetMinimumMargins() 
     If .ShowPrintDialog Then 
      .Documentname = "Some doc name" 
      .Preview = False 'When True shows ok 
      .PrintImage("filename of a png file") 
     End If 
    End With 
+0

크기를 조정하는 코드를 게시 할 수 있습니까? 이미지 크기를 조정하지 않고 실제로 이미지를 자르고있는 것일 수 있습니다. – briddums

+0

[Bounds 문서] (http://msdn.microsoft.com/en-us/library/system.drawing.printing.pagesettings.bounds.aspx)에 따르면, "Bounds 속성 사용 Margins 속성과 함께 페이지의 인쇄 영역을 계산합니다. " 아마도 당신은'printSettings.DefaultPageSettings.Margins'에서 값들을 뺄 것인가? – lsuarez

+0

이미지 크기 조정 코드에 문제가있을 수 있습니다.그냥 크기를 조정하지 말고 Graphics.DrawImage (Image, Rectangle) 오버로드로 그립니다. 보너스로 훨씬 좋은 출력 품질을 얻을 수 있습니다. –

답변

0

이 문제에 대한 해결책을 찾지 못했습니다. 필자는 인쇄 미리보기를 수행 할 때 프린터 여백을 사용하고 실제로 인쇄 할 때는 여백을 무시 (0,0 원으로 시작)하여 작업했습니다. 나는 이것이 아마도 프린터 드라이버의 버그라고 생각합니까? 그러나 나는 확인할 수 없다.

0

는 소리. 위의 설명 중 하나가 언급하는 것처럼 여백을 고려하여 이미지를 적절한 크기로 다시 조정하십시오.

+0

실제로 여백 내에서 인쇄하고 싶습니다. 원래 게시물에 EDIT2를 보시기 바랍니다. –

1

PrintPage 함수에서 인쇄 가능한 페이지 크기로 예기치 않은 .VisibleClipBounds를 사용해보십시오. 한스는 인쇄하기 전에 이미지의 크기를 조정하지 않는 것이 좋습니다.

+0

'e.Graphics.VisibleClipBounds'에는'PrintableArea'와 같은 너비와 높이가 포함되어 있지만 원점은 여백 대신 0,0입니다. Left','Margin.Top' –

1

당신은 MargiBounds 작업을해야합니다

C#에 :

e.Graphics.DrawImage(your_image, e.MarginBounds); 

C++/CLI에 :

e->Graphics->DrawImage(your_image, e->MarginBounds); 

참고 : 이미지는거야 같은 화면 비율이없는 경우 조정할 필요가있다. 이 예에서 이미지 너비가 페이지 너비를 초과했습니다.

Dim adjustment As Double = img.Width/e.MarginBounds.Width 
e.Graphics.DrawImage(img, New Rectangle(New Point(0, 0), New Point(img.Width/adjustment, img.Height/adjustment))) 
관련 문제