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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim Ligne As String
Dim Position As System.Drawing.PointF
Dim Rectangle As RectangleF
Dim Police As Font
Dim HauteurLigne As Single = 0
Dim PositionYPrec As Single = 0
Static IndiceTable As Integer = 0
Dim SeparateurSplit As Char() = {"~"}
Dim LesValeurs() As String
If IndiceTable = 0 Then
PrepareImpression()
End If
Do
Select Case TableAImprimer(IndiceTable).Texte.Substring(0, 6) ' les 6 premiers caractères
Case "~~~~~~" ' Choix du caractère ASCII 126 comme caractère "spécial", séparateur de données.
' Rien à faire (donnée nulle pour faire "tampons" dans la table TableAImprimer
Case "~LIGNE" ' chaque ~ suivant exprime une donnée : ~NomCouleur~Epaisseur~X1~Y1~X2~Y2
LesValeurs = TableAImprimer(IndiceTable).Texte.Split(SeparateurSplit)
Dim Epaisseur As Single = CType(LesValeurs(3), Single)
Dim X1 As Integer = CType(LesValeurs(4), Integer)
Dim Y1 As Integer = CType(LesValeurs(5), Integer)
Dim X2 As Integer = CType(LesValeurs(6), Integer)
Dim Y2 As Integer = CType(LesValeurs(7), Integer)
Dim Couleur As Color = Color.FromName(LesValeurs(2))
Dim Pinceau As New Pen(Couleur, Epaisseur)
If X2 > e.MarginBounds.Height Then ' Attention, ici on n'est pas dans le relatif : X1 et X2 doivent tenir sur une même page
e.HasMorePages = True
Exit Sub
Else
e.HasMorePages = False
End If
e.Graphics.DrawLine(Pinceau, X1, Y1, X2, Y2)
Case "~IMAGE" ' chaque ~ suivant exprime une donnée : ~Nom_et_Chemin_Du_FichierImage~X~Y
LesValeurs = TableAImprimer(IndiceTable).Texte.Split(SeparateurSplit)
Dim MonImage As Image = Image.FromFile(LesValeurs(2))
Dim X As Integer = CType(LesValeurs(3), Integer)
Dim Y As Integer = CType(LesValeurs(4), Integer)
If X + MonImage.Height > e.MarginBounds.Height Then ' Attention, ici on n'est pas dans le relatif : X + la hauteur de l'image doit tenir sur une même page
e.HasMorePages = True
Exit Sub
Else
e.HasMorePages = False
End If
e.Graphics.DrawImage(MonImage, X, Y)
Case Else
Police = TableAImprimer(IndiceTable).Police
Ligne = TableAImprimer(IndiceTable).Texte
If TableAImprimer(IndiceTable).Valeur_Y_RelativePrec > 0 Then
PositionYPrec += TableAImprimer(IndiceTable).Valeur_Y_RelativePrec + HauteurLigne
Else
PositionYPrec += TableAImprimer(IndiceTable).Valeur_Y_RelativePrec
End If
HauteurLigne = Police.GetHeight(e.Graphics)
Position = New PointF(TableAImprimer(IndiceTable).Valeur_X_Rect, PositionYPrec)
Rectangle.Location = Position
If Position.Y + HauteurLigne > e.MarginBounds.Height Then
e.HasMorePages = True
Exit Sub
Else
e.HasMorePages = False
End If
e.Graphics.DrawString(Ligne, Police, Brushes.Black, Rectangle)
End Select
IndiceTable += 1
Loop Until TableAImprimer(IndiceTable).Texte = String.Empty
End Sub |
Partager