Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de Mise en Page / Aperçu / Impression

1 réponse
Avatar
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

1 réponse

Avatar
Stéphane
Je reposte ma demande, au cas où :)

Cordialement,
Stéphane

"Stéphane" a écrit dans le
message de news: %23qJ$
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