Problème de Mise en Page / Aperçu / Impression
Le
Stéphane
Bonjour,
Je suis sous VB .Net Initiation sans le Crystal Report.
Je cherche à mettre en page, avoir 1 aperçu et imprimer 1 document à partir
de données d'1 formulaire.
Résumé des problèmes que je rencontre :
L'aperçu à l'écran diffère de l'impression au niveau des marges.
Les unités pour la mise en page et pour l'impression diffèrent.
Détail du problème de différences entre l'aperçu et l'impression au niveau
des marges :
J'ai 1 formulaire Form1 qui contient :
1 menu Edition1 avec les sous-menu MiseEnPage1, Apercu1 et Imprimer1
1 contrôle PrintDocument1 avec la propriété OriginAtMargins = True
1 contrôle PageSetupDialog1 avec la propriété Document = PrintDocument1
1 contrôle PrintPreviewDialog1 avec la propriété Document = PrintDocument1
1 contrôle PrintDialog1 avec la propriété Document = PrintDocument1
Pour éviter tout problème dûs aux marges minimales fluctuant sur chaque
imprimante,
j'ai changé la propriété OriginAtMargins du contrôle PrintDocument1 (De
False par défaut, changé en True)
Si je clique sur le menu Aperçu, la fenêtre de l'aperçu s'ouvre mais ne
tient pas compte de la propriété OriginAtMargins (qui est sur True) et je
trouve donc ma page sans marge haut et gauche. Si je clique l'imprimante
dans cette fenêtre, la page est imprimée normalement avec les marges.
Je vous mets le code :
Private Sub MiseEnPage1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MiseEnPage1.Click
Me.PageSetupDialog1.ShowDialog()
End Sub
Private Sub Apercu1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Apercu1.Click
'Tente de centrer l'aperçu avantde l'ouvrir
Me.PrintPreviewDialog1.SetBounds((Screen.PrimaryScreen.WorkingArea.Width -
600) / 2, Screen.PrimaryScreen.Bounds.Height -
Screen.PrimaryScreen.WorkingArea.Height, 600,
Screen.PrimaryScreen.WorkingArea.Height -
(Screen.PrimaryScreen.Bounds.Height -
Screen.PrimaryScreen.WorkingArea.Height))
Me.PrintPreviewDialog1.ShowDialog()
End Sub
Private Sub Imprimer1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Imprimer1.Click
If Me.PrintDialog1.ShowDialog() = DialogResult.OK Then
Me.PrintDocument1.Print()
End If
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e
As System.Drawing.Printing.PrintPageEventArgs) Handles
PrintDocument1.PrintPage
Dim largeur_page, largeur, hauteur_page, hauteur As Integer
Dim haut, hauteur_texte As Integer
Dim largeur_séparation, hauteur_séparation As Integer
Dim convertisseur_unité_mm As Single
convertisseur_unité_mm = 0.254
hauteur_séparation = 2 / convertisseur_unité_mm
hauteur_texte = 6 / convertisseur_unité_mm
largeur_page = e.PageSettings.Bounds.Width
largeur = e.MarginBounds.Width
hauteur_page = e.PageSettings.Bounds.Height
hauteur = e.MarginBounds.Height
'Titre
Call PrintTexte(e, "Titre", 0, 0, largeur, hauteur_texte, , , FontStyle.Bold
Or FontStyle.Underline, HorizontalAlignment.Center, , 1, , 14)
haut = hauteur_séparation * 3
'Encadrement de la page
Call PrintTexte(e, "", 0, haut, largeur, hauteur, True)
'
End Sub
Public Sub PrintTexte(ByVal E As System.Drawing.Printing.PrintPageEventArgs,
ByVal txt As String, ByVal gauche As Integer, ByVal haut As Integer, ByVal
largeur As Integer, ByVal hauteur As Integer, Optional ByVal encadré As
Boolean = False, Optional ByVal couleur_encadrement As Byte = 1, Optional
ByVal font_style As FontStyle = FontStyle.Regular, Optional ByVal alignement
As Integer = HorizontalAlignment.Left, Optional ByVal couleur_fond As Byte =
0, Optional ByVal couleur_texte As Byte = 1, Optional ByVal nom_police As
String = "Arial", Optional ByVal taille_police As Byte = 10)
Dim RecF As New RectangleF(gauche, haut, largeur, hauteur)
Dim couleur(2) As Color
'Définitions des couleurs
couleur(0) = Color.Transparent
couleur(1) = Color.Black
couleur(2) = Color.Blue
'Couleur Fond
E.Graphics.FillRectangle(New SolidBrush(couleur(couleur_fond)), RecF)
'Bordure
If encadré Then
E.Graphics.DrawRectangle(New Pen(couleur(couleur_encadrement)), gauche,
haut, largeur, hauteur)
End If
'TEXT
Dim F As New System.Drawing.StringFormat
Select Case alignement
Case HorizontalAlignment.Center
F.Alignment = StringAlignment.Center
F.LineAlignment = StringAlignment.Center
Case HorizontalAlignment.Left
F.Alignment = StringAlignment.Near
F.LineAlignment = StringAlignment.Center
Case HorizontalAlignment.Right
F.Alignment = StringAlignment.Far
F.LineAlignment = StringAlignment.Center
End Select
E.Graphics.DrawString(txt, New Font(nom_police, taille_police, font_style),
New SolidBrush(couleur(couleur_texte)), RecF, F)
End Sub
Détail du 2e problème :
Toujours au niveau des marges, si je clique sur le menu Mise en Page, la
boîte de mise en page apparaît en indiquant les marges par défaut (en mm) :
10
Alors que par défaut, les marges sont de 1 pouce soit 25,4 mm
Le pb vient en fait du fait que dans la boîte ce soit indiqué (en mm) au
lieu de (en dizième de pouce).
Ce qui est bien confirmé car lors de l'édition de la page, j'ai
effectivement 1 marge de 1 pouce de chaque côté de la page.
Ce 2e problème induit 1 3e problème :
Détail du 3e problème :
Toujours au niveau des marges dans la boîte de Mise en Page, je valide par
le bouton OK (ou par la touche Entrée), et même si je ne modifie pas les
valeurs, si je retourne de Mise en Page, la valeur des marges ont été
divisés par 2.54.
Comment faire pour résoudre ces problèmes ?
Merci d'avance pour votre aide.
_________________________
Cordialement,
Stéphane
Je suis sous VB .Net Initiation sans le Crystal Report.
Je cherche à mettre en page, avoir 1 aperçu et imprimer 1 document à partir
de données d'1 formulaire.
Résumé des problèmes que je rencontre :
L'aperçu à l'écran diffère de l'impression au niveau des marges.
Les unités pour la mise en page et pour l'impression diffèrent.
Détail du problème de différences entre l'aperçu et l'impression au niveau
des marges :
J'ai 1 formulaire Form1 qui contient :
1 menu Edition1 avec les sous-menu MiseEnPage1, Apercu1 et Imprimer1
1 contrôle PrintDocument1 avec la propriété OriginAtMargins = True
1 contrôle PageSetupDialog1 avec la propriété Document = PrintDocument1
1 contrôle PrintPreviewDialog1 avec la propriété Document = PrintDocument1
1 contrôle PrintDialog1 avec la propriété Document = PrintDocument1
Pour éviter tout problème dûs aux marges minimales fluctuant sur chaque
imprimante,
j'ai changé la propriété OriginAtMargins du contrôle PrintDocument1 (De
False par défaut, changé en True)
Si je clique sur le menu Aperçu, la fenêtre de l'aperçu s'ouvre mais ne
tient pas compte de la propriété OriginAtMargins (qui est sur True) et je
trouve donc ma page sans marge haut et gauche. Si je clique l'imprimante
dans cette fenêtre, la page est imprimée normalement avec les marges.
Je vous mets le code :
Private Sub MiseEnPage1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MiseEnPage1.Click
Me.PageSetupDialog1.ShowDialog()
End Sub
Private Sub Apercu1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Apercu1.Click
'Tente de centrer l'aperçu avantde l'ouvrir
Me.PrintPreviewDialog1.SetBounds((Screen.PrimaryScreen.WorkingArea.Width -
600) / 2, Screen.PrimaryScreen.Bounds.Height -
Screen.PrimaryScreen.WorkingArea.Height, 600,
Screen.PrimaryScreen.WorkingArea.Height -
(Screen.PrimaryScreen.Bounds.Height -
Screen.PrimaryScreen.WorkingArea.Height))
Me.PrintPreviewDialog1.ShowDialog()
End Sub
Private Sub Imprimer1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Imprimer1.Click
If Me.PrintDialog1.ShowDialog() = DialogResult.OK Then
Me.PrintDocument1.Print()
End If
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e
As System.Drawing.Printing.PrintPageEventArgs) Handles
PrintDocument1.PrintPage
Dim largeur_page, largeur, hauteur_page, hauteur As Integer
Dim haut, hauteur_texte As Integer
Dim largeur_séparation, hauteur_séparation As Integer
Dim convertisseur_unité_mm As Single
convertisseur_unité_mm = 0.254
hauteur_séparation = 2 / convertisseur_unité_mm
hauteur_texte = 6 / convertisseur_unité_mm
largeur_page = e.PageSettings.Bounds.Width
largeur = e.MarginBounds.Width
hauteur_page = e.PageSettings.Bounds.Height
hauteur = e.MarginBounds.Height
'Titre
Call PrintTexte(e, "Titre", 0, 0, largeur, hauteur_texte, , , FontStyle.Bold
Or FontStyle.Underline, HorizontalAlignment.Center, , 1, , 14)
haut = hauteur_séparation * 3
'Encadrement de la page
Call PrintTexte(e, "", 0, haut, largeur, hauteur, True)
'
End Sub
Public Sub PrintTexte(ByVal E As System.Drawing.Printing.PrintPageEventArgs,
ByVal txt As String, ByVal gauche As Integer, ByVal haut As Integer, ByVal
largeur As Integer, ByVal hauteur As Integer, Optional ByVal encadré As
Boolean = False, Optional ByVal couleur_encadrement As Byte = 1, Optional
ByVal font_style As FontStyle = FontStyle.Regular, Optional ByVal alignement
As Integer = HorizontalAlignment.Left, Optional ByVal couleur_fond As Byte =
0, Optional ByVal couleur_texte As Byte = 1, Optional ByVal nom_police As
String = "Arial", Optional ByVal taille_police As Byte = 10)
Dim RecF As New RectangleF(gauche, haut, largeur, hauteur)
Dim couleur(2) As Color
'Définitions des couleurs
couleur(0) = Color.Transparent
couleur(1) = Color.Black
couleur(2) = Color.Blue
'Couleur Fond
E.Graphics.FillRectangle(New SolidBrush(couleur(couleur_fond)), RecF)
'Bordure
If encadré Then
E.Graphics.DrawRectangle(New Pen(couleur(couleur_encadrement)), gauche,
haut, largeur, hauteur)
End If
'TEXT
Dim F As New System.Drawing.StringFormat
Select Case alignement
Case HorizontalAlignment.Center
F.Alignment = StringAlignment.Center
F.LineAlignment = StringAlignment.Center
Case HorizontalAlignment.Left
F.Alignment = StringAlignment.Near
F.LineAlignment = StringAlignment.Center
Case HorizontalAlignment.Right
F.Alignment = StringAlignment.Far
F.LineAlignment = StringAlignment.Center
End Select
E.Graphics.DrawString(txt, New Font(nom_police, taille_police, font_style),
New SolidBrush(couleur(couleur_texte)), RecF, F)
End Sub
Détail du 2e problème :
Toujours au niveau des marges, si je clique sur le menu Mise en Page, la
boîte de mise en page apparaît en indiquant les marges par défaut (en mm) :
10
Alors que par défaut, les marges sont de 1 pouce soit 25,4 mm
Le pb vient en fait du fait que dans la boîte ce soit indiqué (en mm) au
lieu de (en dizième de pouce).
Ce qui est bien confirmé car lors de l'édition de la page, j'ai
effectivement 1 marge de 1 pouce de chaque côté de la page.
Ce 2e problème induit 1 3e problème :
Détail du 3e problème :
Toujours au niveau des marges dans la boîte de Mise en Page, je valide par
le bouton OK (ou par la touche Entrée), et même si je ne modifie pas les
valeurs, si je retourne de Mise en Page, la valeur des marges ont été
divisés par 2.54.
Comment faire pour résoudre ces problèmes ?
Merci d'avance pour votre aide.
_________________________
Cordialement,
Stéphane

Poser une question


Cordialement,
Stéphane
"Stéphane" message de news: %23qJ$