Allo tout le monde,
J'ai un petit probleme. Je veux imprimer une form a partir de vb .net (J'utilise Visual Studio 2005). J'ai trouve une facon de le faire sur l'internet. Par contre avec cette methode, il m'etait impossible d'avoir du text de bonne qualites. Plus precisement, j'ai une form qui contient 30 labels et un picturebox. Certaines label sont de type Arial et de grandeur 6.
Quand j'imprime ma forme on dirait que mon imprimante modifie l'image de ma forme, car mes labels qui contient un caractere 'o' 'u' 'c' 'd' etc n'est pas lisible alors que un 'L' 'I' 'E' est lisible. J pense qu'il fait une sorte de anti-alias ou qu'il agrandi ma forme. (lors de la visualisation de ma forme, les labels sont tres claires et lisible. C'est juste au moment de l'imprimer que les labels devient inlisible ou moins claire). Je sais que microsoft a deja publie une sorte de programme externe qui nous permet d'imprimer une forme. Par contre, apres l'avoir essaye j'ai remarque que j'avais toujours le meme probleme.
J' ai essaye de trouver une reponse sur google mais disons que je n'ai pas avance depuis 4 heures. alors si vous pouvez m'aider je vous serez reconnaisant
Je vous remercie et voici mon code
Private WithEvents pd As Printing.PrintDocument
Private formImage As Bitmap
Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' create an instance of the PrintDocument component
pd = New Printing.PrintDocument
Me.StartPosition = FormStartPosition.CenterScreen
End Sub
Private Declare Function BitBlt Lib "gdi32.dll" Alias _
"BitBlt" (ByVal hdcDest As IntPtr, _
ByVal nXDest As Integer, ByVal nYDest As _
Integer, ByVal nWidth As Integer, _
ByVal nHeight As Integer, ByVal _
hdcSrc As IntPtr, ByVal nXSrc As Integer, _
ByVal nYSrc As Integer, _
ByVal dwRop As System.Int32) As Long
Private Sub pd_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs) _
Handles pd.PrintPage
e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.None
e.Graphics.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
e.Graphics.TextContrast = 5
e.PageSettings.Color = False
e.PageSettings.PrinterResolution.Kind = Printing.PrinterResolutionKind.High
e.Graphics.DrawImage(formImage, 0, 0)
End Sub
Public Sub printForm()
' Me.CreateGraphics.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
Me.CreateGraphics.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
Me.CreateGraphics.SmoothingMode = Drawing2D.SmoothingMode.None
Me.CreateGraphics.InterpolationMode = Drawing2D.InterpolationMode.High
'pd.DefaultPageSettings.PrinterResolution.Kind = Printing.PrinterResolutionKind.High
Dim g As Graphics = Me.CreateGraphics() 'Me.CreateGraphics()
Dim s As Size = Me.Size 'Me.Size
g.SmoothingMode = Drawing2D.SmoothingMode.None
g.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
g.TextContrast = 5
g.InterpolationMode = Drawing2D.InterpolationMode.High
formImage = New Bitmap(s.Width, s.Height, g)
Dim mg As Graphics = Graphics.FromImage(formImage)
mg.SmoothingMode = Drawing2D.SmoothingMode.None
mg.TextRenderingHint = Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit
mg.TextContrast = 5
mg.InterpolationMode = Drawing2D.InterpolationMode.High
Dim dc1 As IntPtr = g.GetHdc
Dim dc2 As IntPtr = mg.GetHdc
' added code to compute and capture the form
' title bar and borders
Dim widthDiff As Integer = _
(Me.Width - Me.ClientRectangle.Width)
'(Me.Width - Me.ClientRectangle.Width)
Dim heightDiff As Integer = _
(Me.Height - Me.ClientRectangle.Height)
' (Me.Height - Me.ClientRectangle.Height)
Dim borderSize As Integer = widthDiff \ 2
Dim heightTitleBar As Integer = heightDiff - borderSize
BitBlt(dc2, 0, 0, _
Me.ClientRectangle.Width + widthDiff, _
Me.ClientRectangle.Height + heightDiff, dc1, _
0 - borderSize, 0 - heightTitleBar, 13369376)
g.ReleaseHdc(dc1)
mg.ReleaseHdc(dc2)
'Dim pp As New PrintDialog()
'pp.Document = pd
'pp.ShowDialog()
' pd.PrinterSettings.PrinterName = "Microsoft Office Document Image Writer"
pd.DefaultPageSettings.Color = False
pd.DefaultPageSettings.PrinterResolution.Kind = Printing.PrinterResolutionKind.High
pd.DefaultPageSettings.PrinterSettings.DefaultPageSettings.PrinterResolution.Kind = Printing.PrinterResolutionKind.High
pd.DefaultPageSettings.PrinterSettings.DefaultPageSettings.Color = False
pd.Print()
End Sub
Configuration: Windows XP
Internet Explorer 7.0