Imprimer un fichier texte [Résolu]

wouldsmina 18 Messages postés lundi 2 juin 2003Date d'inscription 8 mars 2007 Dernière intervention - 14 févr. 2007 à 09:56 - Dernière réponse : sobullshit 178 Messages postés vendredi 9 février 2007Date d'inscription 8 juin 2007 Dernière intervention
- 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.
Afficher la suite 

6 réponses

Répondre au sujet
sobullshit 178 Messages postés vendredi 9 février 2007Date d'inscription 8 juin 2007 Dernière intervention - 14 févr. 2007 à 15:08
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sobullshit
wouldsmina 18 Messages postés lundi 2 juin 2003Date d'inscription 8 mars 2007 Dernière intervention - 14 févr. 2007 à 10:17
0
Utile
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.
Commenter la réponse de wouldsmina
sobullshit 178 Messages postés vendredi 9 février 2007Date d'inscription 8 juin 2007 Dernière intervention - 14 févr. 2007 à 10:45
0
Utile
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
Commenter la réponse de sobullshit
wouldsmina 18 Messages postés lundi 2 juin 2003Date d'inscription 8 mars 2007 Dernière intervention - 14 févr. 2007 à 11:12
0
Utile
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.
Commenter la réponse de wouldsmina
wouldsmina 18 Messages postés lundi 2 juin 2003Date d'inscription 8 mars 2007 Dernière intervention - 14 févr. 2007 à 15:34
0
Utile
ya pas a dire t un boeuf, merci pour ton aide. J'ai plus de question. a+
Commenter la réponse de wouldsmina
sobullshit 178 Messages postés vendredi 9 février 2007Date d'inscription 8 juin 2007 Dernière intervention - 14 févr. 2007 à 16:18
0
Utile
de rien, l'aide c'est fait pour etre partagé (sauf l'aide microttesoft)
Commenter la réponse de sobullshit

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.