Imprimer un fichier texte

Résolu
wouldsmina Messages postés 18 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 8 mars 2007 - 14 févr. 2007 à 09:56
sobullshit Messages postés 178 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 8 juin 2007 - 14 févr. 2007 à 16:18
bonjour,
j'ai recuperer du code sur un forum pour imprimer un fichier texte, il marche bien, mais il n'y a aucun commentaire. Vue que je suis debutant, je n'arrive pas a le modeler a ma "sauce", car j'ai besoin qu'il effectue un saut de ligne toutes les trois ligne (chose faite dans le fichier texte), mais pas moyen de comprendre, tous s'imprime sans aucun saut!!!
voila le code :

public class frm
    Dim FichierTexte As StreamReader

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       
    Dim ValMarge As Integer = Printing.PrinterUnitConvert.Convert(100, PrinterUnit.TenthsOfAMillimeter, PrinterUnit.Display)

        With Me.PrintDocument1.DefaultPageSettings
            .Landscape = False
            .Color = False
            .Margins = New Printing.Margins(ValMarge, ValMarge, ValMarge, ValMarge)
        End With

        FichierTexte = New StreamReader("c:\etiq\fichier.txt")
        Me.PrintDocument1.Print()
        FichierTexte.Close()
    End Sub

  Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

        Dim YPos As Single = 0
        Dim cmpt As Integer = 0
        Dim MargeG As Single = e.MarginBounds.Left
        Dim MargeH As Single = e.MarginBounds.Top
        Dim LigneEnCours As String = Nothing
        Dim Police As New Font("Arial", 6)
        Dim RectSortie As New SizeF

        YPos = MargeH
        While YPos < MargeH + e.MarginBounds.Height
            LigneEnCours = FichierTexte.ReadLine()

            If LigneEnCours Is Nothing Then
                Exit While
            End If
            RectSortie = e.Graphics.MeasureString(LigneEnCours, Police, e.MarginBounds.Width, New StringFormat())
            e.Graphics.DrawString(LigneEnCours, Police, Brushes.Black, New RectangleF(MargeG, YPos, e.MarginBounds.Width, RectSortie.Height), New StringFormat())
            YPos = YPos + RectSortie.Height
        End While

        If Not (LigneEnCours Is Nothing) Then
            e.HasMorePages = True
        Else
            e.HasMorePages = False
        End If

    End Sub
End class

voila si quelqu'un pouvait m'expliquer comment faire, je serait tres content.

6 réponses

sobullshit Messages postés 178 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 8 juin 2007
14 févr. 2007 à 15:08
public class frm
    Dim FichierTexte As StreamReader

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       
    Dim ValMarge As Integer = Printing.PrinterUnitConvert.Convert(100, PrinterUnit.TenthsOfAMillimeter, PrinterUnit.Display)

        With Me.PrintDocument1.DefaultPageSettings
            .Landscape = False
            .Color = False
            .Margins = New Printing.Margins(ValMarge, ValMarge, ValMarge, ValMarge)
        End With

        FichierTexte = New StreamReader("c:\etiq\fichier.txt")
        Me.PrintDocument1.Print()
        FichierTexte.Close()
    End Sub

  Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

'Déclaration des variables
        Dim YPos As Single = 0
        Dim cmpt As Integer = 0
        Dim MargeG As Single = e.MarginBounds.Left
        Dim MargeH As Single = e.MarginBounds.Top
        Dim LigneEnCours As String = Nothing
        Dim Police As New Font("Arial", 6)
        Dim RectSortie As New SizeF

'tu défini ta position de départ sur laxe Y
        YPos = MargeH
'Si ta position sur laxe Y est inférieur à la position de la marge supérieur bah tu peu imprimé (jcroi jsui pa sur de ske le gars a écri pke kom jtai di le code jle li kan jfai le truc san tro réfléchir, mai un peu kan mm, un tt peti peu)

        While YPos < MargeH + e.MarginBounds.Height
            LigneEnCours = FichierTexte.ReadLine()    'tu met la ligne de ton fichier texte ds la variabl ligneencours

'si la variabl ligneencours est vide (ski veu dir ke ton fichier text est fini), tu quitte la partie impression
            If LigneEnCours Is Nothing Then
                Exit While
            End If
'si la variabl n'est pas vide,  bah là tu fai d tas de truc super compliké pour discuter avec ton imprimante ou je connai absolumen rien
            RectSortie = e.Graphics.MeasureString(LigneEnCours, Police, e.MarginBounds.Width, New StringFormat())
            e.Graphics.DrawString(LigneEnCours, Police, Brushes.Black, New RectangleF(MargeG, YPos, e.MarginBounds.Width, RectSortie.Height), New StringFormat())

'là tu te repositionne sur laxe Y pour imprimer la prochaine ligne (pour pa ke tu soi tjrs a la mm hauteur et ke ça écriv tjrs sur la mm ligne)
            YPos = YPos + RectSortie.Height

'là c ma boucl ke ta demandé pour ke ça fass des saut kan timprime (je c pa si c'est comme ça que tu la modifié mai bon on sen fou)
            i=i+1
            if i = 3 then
               LigneEnCours = Char(9)
               RectSortie = e.Graphics.MeasureString(LigneEnCours, Police, e.MarginBounds.Width, New StringFormat())
            e.Graphics.DrawString(LigneEnCours, Police, Brushes.Black, New RectangleF(MargeG, YPos, e.MarginBounds.Width, RectSortie.Height), New StringFormat())
               i=0
           End if
'Là tu quitte la partie impression pke ta position sur Y est ds la marge supérieure
        End While

'si ta variabl ligneencours n'est pas vide, alors (jconnai pa le e.HasMorePages) ça di kil y a encore des truc à imprimé dans ton fichier, si c vide ça di ke ya plu rien a imprimer
        If Not (LigneEnCours Is Nothing) Then
            e.HasMorePages = True
        Else
            e.HasMorePages = False
        End If

    End Sub
End class

'là ton programme est fini donc tu peu metr ce que tu veu du momen que c'est inutile
3
wouldsmina Messages postés 18 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 8 mars 2007
14 févr. 2007 à 10:17
au fait j'ai oublié de dire aussi que j'utilise une imprimante matricielle avec des feuilles a trou, donc il n'y a pas de page, tout est a la suite.
0
sobullshit Messages postés 178 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 8 juin 2007
14 févr. 2007 à 10:45
Si tu débutes c'est peut-être pas le mieux de "pomper" directement le code, je pense qu'il vaut mieux bosser dessus et le faire à sa sauce pour le comprendre. Sinon comme j'suis un boeuf j'ai just rajouté qques lignes de codes qui (j'ai pa lu le code mais ça semble joli) devraient faire que toutes les 3 lignes tu imprime un ligne vide.
Si ça marche pas je pense que quelqu'un se fera une joie de dire que j'suis un blaireau de pas réussir à t'aider et que ce que je fais sert à rien.

public class frm
    Dim FichierTexte As StreamReader

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       
    Dim ValMarge As Integer = Printing.PrinterUnitConvert.Convert(100, PrinterUnit.TenthsOfAMillimeter, PrinterUnit.Display)

        With Me.PrintDocument1.DefaultPageSettings
            .Landscape = False
            .Color = False
            .Margins = New Printing.Margins(ValMarge, ValMarge, ValMarge, ValMarge)
        End With

        FichierTexte = New StreamReader("c:\etiq\fichier.txt")
        Me.PrintDocument1.Print()
        FichierTexte.Close()
    End Sub

  Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

        Dim YPos As Single = 0
        Dim cmpt As Integer = 0
        Dim MargeG As Single = e.MarginBounds.Left
        Dim MargeH As Single = e.MarginBounds.Top
        Dim LigneEnCours As String = Nothing
        Dim Police As New Font("Arial", 6)
        Dim RectSortie As New SizeF

        YPos = MargeH
        While YPos < MargeH + e.MarginBounds.Height
            LigneEnCours = FichierTexte.ReadLine()

            If LigneEnCours Is Nothing Then
                Exit While
            End If
            RectSortie = e.Graphics.MeasureString(LigneEnCours, Police, e.MarginBounds.Width, New StringFormat())
            e.Graphics.DrawString(LigneEnCours, Police, Brushes.Black, New RectangleF(MargeG, YPos, e.MarginBounds.Width, RectSortie.Height), New StringFormat())
            YPos = YPos + RectSortie.Height
            i=i+1
            if i = 3 then
               LigneEnCours = "   "
               RectSortie = e.Graphics.MeasureString(LigneEnCours, Police, e.MarginBounds.Width, New StringFormat())
            e.Graphics.DrawString(LigneEnCours, Police, Brushes.Black, New RectangleF(MargeG, YPos, e.MarginBounds.Width, RectSortie.Height), New StringFormat())
               i=0
           End if
        End While

        If Not (LigneEnCours Is Nothing) Then
            e.HasMorePages = True
        Else
            e.HasMorePages = False
        End If

    End Sub
End class
0
wouldsmina Messages postés 18 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 8 mars 2007
14 févr. 2007 à 11:12
merci pour ta reponse sobullshit, ton code marche presque, en fait j'ai essayer ta methode en ajoutant, a la place de ligneencours=" ", le retour chariot chr(13). bon ca n'a pas marché non plus, mais bizarrement avec une tabulation sur la ligne vide soit chr(9) le miracle c'est produit. Je compernd pas pourquoi mais bon...
mais ce n'est pas pour autant que je n'ai plus besoin d'aide, comme tu la dit il vaut mieux bosser dessus, alors si quelqu'un peut m'ajouter des commentaire sur le code pour que je comprenne mieux ce serai bien, Genre un boeuf en vb quoi.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
wouldsmina Messages postés 18 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 8 mars 2007
14 févr. 2007 à 15:34
ya pas a dire t un boeuf, merci pour ton aide. J'ai plus de question. a+
0
sobullshit Messages postés 178 Date d'inscription vendredi 9 février 2007 Statut Membre Dernière intervention 8 juin 2007
14 févr. 2007 à 16:18
de rien, l'aide c'est fait pour etre partagé (sauf l'aide microttesoft)
0
Rejoignez-nous