Nel caso sia necessario stampare un'immagine rispettando le dimensioni della stessa e posizionandola in modo preciso sulla pagina il .NET Framework offre nativamente tutto ciò che ci serve. Occorre però fare alcune considerazioni sulle unità di misura che mi annoto a mia futura memoria e per eventaule utilità di altri:
- Per comodità si esprimeranno le misure dei margini che utilizzerò per posizionare l'immagine e le dimensioni della stessa in millimetri.
- L'unità di misura dei margini nell'oggetto DefaultPageSettings sono espresse in centesimi di pollice.
- Oltre ai magini si deve tenere conto anche degli HardMarginX e HardMarginY espressi anch'essi in centesimi di pollice e che rappresentano i magini fisici della stampante. Gli HardMarginX e HardMarginY sono in margini al di sotto di cui non è possibile scendere e se utilizziamo i margini per posizionare l'immagine occorre ricordare che il margine reale e il margine impostao tramite DefaultPageSettings.Margins più HardMarginX per Left e HardMarginY per Top.
- Le dimensioni delle immagini sono date in pixels e dpi (Dots per inch) quindi le dimensioni in pollici saranno Inches = Pixels/DPI che andranno ancora convertite in centesimi di pollice moltilicando per 100.
Di seguito un banale esempio:
Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click
'Impostazione margini left, right, top, bottom
Util.SetMarginInMillimeters(Me.Document.DefaultPageSettings, 15, 15, 20, 20)
Me.PrintPreviewDialog.ShowDialog(Me)
End Sub
Private Sub Document_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles Document.PrintPage
'Impostazione stampa di una sola pagina
e.HasMorePages = False
e.Graphics.DrawImage(My.Resources.Test, _
e.MarginBounds.Left, e.MarginBounds.Top, _
Util.PixelsToHundredthsOfInch(My.Resources.Test.Width, My.Resources.Test.HorizontalResolution), _
Util.PixelsToHundredthsOfInch(My.Resources.Test.Height, My.Resources.Test.VerticalResolution))
End Sub
Per l'esempio completo si veda il seguente link: http://xoomer.alice.it/ermannogoletto/MyLab/TestPrintImageFile.zip
(per scaricarlo in caso di problemi tasto destro -> Salva con nome).