none
Comment imprimer du texte ? RRS feed

  • Question

  • Bonjour,

    Je n'arrive pas à imprimer du texte via un textbox, ça fait une seule page et n'importe quoi avec des marges infernales.

    J'ai récupéré un vieux code malade dans un didacticiel anémié, voici ce que j'ai :

    Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
     e.Graphics.DrawString(TextBox1.Text, New Font("Courier New", 12, FontStyle.Regular), Brushes.Black, 150, 125)
    End Sub
    Sub ImprimerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImprimerToolStripMenuItem.Click
     If Len(TextBox1.Text) < 1 Then Exit Sub
     PrintDocument1.Print()
     PrintDocument1.Dispose()
    End Sub
    

    Si quelqu'un peut me donner un exemple ?

    J'aimerais bien pouvoir définir les marges, compter les lignes, décider du saut de page, enfin bref, tout ce que fait vb6, je rappelle que j'imprime un textbox, enfin, son contenu ?

    Merci, cordialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    samedi 2 avril 2011 15:55

Réponses

Toutes les réponses

  • Bonjour Joe,

     

    Voici la classe PrintDocument expliquée ainsi qu'un exemple:

    http://msdn.microsoft.com/fr-fr/library/68eybb19.aspx

    J'ai un exemple en Csharp si tu sais le lire ?

     


    fred
    dimanche 3 avril 2011 15:27
  • Joe,

    Voici mon exemple Csharp traduis en VB:

     

    Imports System.Drawing.Printing
    Public Class Form1
     Private Sub ButtonPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonPrint.Click
     Dim document As PrintDocument
     document = New PrintDocument()
     AddHandler document.PrintPage, AddressOf Me.document_PrintPage
    document.Print() End Sub Private Sub document_PrintPage(ByVal sender As Object, ByVal e As PrintPageEventArgs) Dim text(7) As String text(0) = "--------------------------" text(1) = Label1.Text text(2) = text(0) text(3) = Label2.Text text(4) = "-espace ou tabulation ou autre séparateur" text(5) = text(0) 'etc Dim printFont As New Font("Arial", 35, FontStyle.Regular) For i = 0 To 5 e.Graphics.DrawString(text(i), printFont, Brushes.Black, 0, i * 30) Next End Sub End Class

     


    fred
    dimanche 3 avril 2011 15:51
  • Joe,

    et enfin l'évènement PrintPage avec un exemple

    http://msdn.microsoft.com/fr-fr/library/7bxe9czy.aspx

     


    fred
    dimanche 3 avril 2011 16:09
  • Bonjour Fred,

    Alors chat marche SAUF un point, je n'arrive pas à avoir le saut de page, voici mon code, la suite des commentaires après ce dernier :

     Sub ImprimerToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImprimerToolStripMenuItem.Click
     If Len(TextBox1.Text) < 1 Then Exit Sub
     Call traiteTexte() ' traitement de texte
     Dim document = New System.Drawing.Printing.PrintDocument() ' assignation
     '
     AddHandler document.PrintPage, AddressOf Me.document_PrintPage ' appel imp
     '
     document.Print() ' impression
     document.Dispose() ' fermeture
     My.Application.DoEvents()
     TextBox1.Refresh() ' deselecAll
    End nd Sub
    Sub document_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
     Dim printFont As New Font("Courier New", 12, FontStyle.Regular) ' police
     e.Graphics.DrawString(letexte, printFont, Brushes.Black, 0, 0) ' objet graphique chargé
    End Sub
    Sub traiteTexte()
     Dim i As Integer
     Dim j As Integer
     Dim k As Integer
     Dim reste As Integer
     Dim numPage As Integer = 0
     Dim numeroter As Boolean = True
     Dim maxiSignes As Integer = 75 ' (courier new 12)
     Dim maxiLignes As Integer = 62
     Dim s() As String = Split(TextBox1.Text, vbCrLf, , 1)
     Dim t(UBound(s) * 5) As String
     Dim r As String
     j = 1
     For i = 0 To UBound(s) - 1
     bis: If Len(s(i)) <= maxiSignes Then t(j) = s(i)
     If Len(s(i)) > maxiSignes Then ' coupure
      For k = maxiSignes To 1 Step -1
      If Mid(s(i), k, 1) = " " Then
       t(j) = Mid(s(i), 1, k - 1)
       reste = Len(s(i)) - k
       s(i) = Trim(Mid(s(i), k + 1, reste))
       j = j + 1
       GoTo bis
      End If
      Next k
     End If
     j = j + 1
     Next i
     letexte = ""
     numPage = 1
     k = 1
     For i = 1 To j - 1
     letexte = letexte & t(i) & vbCrLf
     k = k + 1
     Select Case numeroter
      Case True
      If k = maxiLignes - 2 Then
       letexte = letexte & " " & vbCrLf
       letexte = letexte & " -" & numPage & "-" & vbCrLf
       letexte = letexte & vbFormFeed
       k = 1
       numPage = numPage + 1
      End If
      Case False
      If k = maxiLignes Then
       letexte = letexte & vbFormFeed
       k = 1
      End If
     End Select
     Next i
    End Sub
     
    

     Et donc, comme tu le vois dans mon texte (variable globale letexte) j'insère un saut de page (vbFormFeed), mais ça ne fait strictement rien, il s'arrête à la première page ?

    Si tu as une idée, sinon me le dire que je pose une autre question sur ce point, merci, cordialement.

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mardi 5 avril 2011 12:03
  • Bonjour Joe,

    Si tu imprimes plus de 62 lignes, est-ce que les lignes après la 62ème s'impriment ?

    Si letexte fait deux pages, la deuxième page s'imprime-t-elle ?

     


    fred
    mardi 5 avril 2011 12:30
  • Négatif, aucune impression si je dépasse une page, tu peux essayer si tu as le temps en reprenant mon code, il ne faut pas grand chose pour le faire tourner, veux-tu que je te l'envoie, où ?

    Cordialement.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mardi 5 avril 2011 12:55
  • Bon, merci de ton aide Fred, je repose la question sur le saut de page, cordialement.

    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    • Marqué comme réponse EhJoe mardi 5 avril 2011 20:55
    mardi 5 avril 2011 20:55