1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
'- ajoute pour tester l'exemple:
'- un Panel sur le WinForm
'- PrintDocument
'- PrintPreviewDialog
'- un bouton ApercuImp
Imports System.Drawing.Printing
Public Class Form2
Public Sub New()
' Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
' Un simple control panel que j'ai rempli avec d'autres controls
' Dock du panel1 & position à 0,0
Me.Panel1.Dock = DockStyle.Fill
Me.Location = New Point(0, 0)
'Ajuste la taille du form
Me.WindowState = FormWindowState.Maximized
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim MyGr As Graphics = e.Graphics
'Met PageUnit à Display (apercu conforme à sortie printer)
MyGr.PageUnit = GraphicsUnit.Display
MyGr.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
MyGr.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
'Envoie panel dans un bitmap avec Control.DrawToBitmap
Dim memoryImagePanel = New Bitmap(Me.Panel1.Bounds.Width, Me.Panel1.Bounds.Height)
Me.Panel1.DrawToBitmap(memoryImagePanel, Me.Panel1.Bounds)
'code .net managed qui recopie l'image en gardant les proportions
'rect source =>memoryImagePanel ou ton form
Dim RectSource As RectangleF = New Rectangle(0, 0, memoryImagePanel.Width, memoryImagePanel.Height)
'definit les "marges" diaboliques
Dim myMargin As Margins = New Margins(40, 40, 40, 40)
'les assignes à PrintDocument1
PrintDocument1.DefaultPageSettings.Margins = myMargin
'rect destination c'est notre page A4 ou se trouve le rectangle d'impression e.MarginBounds que nous avons personnalise cette fois.
Dim RectDest As RectangleF = e.MarginBounds
'surcharge de DrawImage qui recopie l'image en gardant les proportions
MyGr.DrawImage(memoryImagePanel, RectDest, RectSource, GraphicsUnit.Pixel)
End Sub
Private Sub btnApercuImp_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnApercuImp.Click
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog()
End Sub
End Class |
Partager