Imprimer un fichier texte multipage (Windows Forms .NET)

Il est courant pour les applications Windows d’imprimer du texte. La classe Graphics fournit des méthodes pour dessiner des objets (graphismes ou texte) sur un périphérique, tel qu'un écran ou une imprimante. La section suivante décrit en détail le processus d’impression du fichier texte. Cette méthode ne prend pas en charge l’impression de fichiers texte non brut, tels qu’un document Word Bureau ou un fichier PDF.

Remarque

Le méthodes DrawText de TextRenderer ne sont pas prises en charge pour l'impression. Vous devez toujours utiliser les méthodes DrawString de Graphics, comme illustré dans l'exemple de code suivant, pour dessiner du texte pour l'impression.

Pour imprimer du texte

  1. Dans Visual Studio, double-cliquez sur le formulaire à partir duquel vous souhaitez imprimer, dans le volet Explorateur de solutions. Cela ouvre le Concepteur visuel.

  2. Dans la boîte à outils, double-cliquez sur le PrintDocument composant pour l’ajouter au formulaire. Cela doit créer un PrintDocument composant portant le nom printDocument1.

  3. Ajoutez un Button formulaire ou utilisez un bouton qui figure déjà sur le formulaire.

  4. Dans le Concepteur visuel du formulaire, sélectionnez le bouton. Dans le volet Propriétés , sélectionnez le bouton Filtre d’événements , puis double-cliquez sur l’événement Click pour générer un gestionnaire d’événements.

  5. Le Click code d’événement doit être visible. En dehors de l’étendue du gestionnaire d’événements, ajoutez une variable de chaîne privée à la classe nommée stringToPrint.

    private string stringToPrint="";
    
    'Private PrintDocument1 As New PrintDocument()
    Private stringToPrint As String
    
  6. De retour dans le code du Click gestionnaire d’événements, définissez la DocumentName propriété sur le nom du document. Ces informations sont envoyées à l’imprimante. Ensuite, lisez le contenu du texte du document et stockez-le dans la stringToPrint chaîne. Enfin, appelez la Print méthode pour déclencher l’événement PrintPage . La Print méthode est mise en surbrillance ci-dessous.

    private void button1_Click(object sender, EventArgs e)
    {
        string docName = "testPage.txt";
        string docPath = @"C:\";
        string fullPath = System.IO.Path.Combine(docPath, docName);
    
        printDocument1.DocumentName = docName;
    
        stringToPrint = System.IO.File.ReadAllText(fullPath);
        
        printDocument1.Print();
    }
    
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
        Dim docName As String = "testPage.txt"
        Dim docPath As String = "C:\"
        Dim fullPath As String = System.IO.Path.Combine(docPath, docName)
    
        PrintDocument1.DocumentName = docName
    
        stringToPrint = System.IO.File.ReadAllText(fullPath)
        
        PrintDocument1.Print()
    
    End Sub
    
  7. Revenez au Concepteur visuel du formulaire et sélectionnez le PrintDocument composant. Dans le volet Propriétés , sélectionnez le filtre d’événements , puis double-cliquez sur l’événement PrintPage pour générer un gestionnaire d’événements.

  8. Dans le gestionnaire d'événements PrintPage, utilisez la propriété Graphics de la classe PrintPageEventArgs et le contenu du document pour calculer la longueur de ligne et le nombre de lignes par page. Une fois chaque page dessinée, case activée s’il s’agit de la dernière page et définissez la HasMorePages propriété de la PrintPageEventArgs page en conséquence. L'événement PrintPage est déclenché jusqu'à ce que HasMorePages soit false.

    Dans l’exemple de code suivant, le gestionnaire d’événements est utilisé pour imprimer le contenu du fichier « testPage.txt » dans la même police que celle utilisée sur le formulaire.

    private void PrintDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
    {
        int charactersOnPage = 0;
        int linesPerPage = 0;
    
        // Sets the value of charactersOnPage to the number of characters
        // of stringToPrint that will fit within the bounds of the page.
        e.Graphics.MeasureString(stringToPrint, this.Font,
            e.MarginBounds.Size, StringFormat.GenericTypographic,
            out charactersOnPage, out linesPerPage);
    
        // Draws the string within the bounds of the page
        e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black,
            e.MarginBounds, StringFormat.GenericTypographic);
    
        // Remove the portion of the string that has been printed.
        stringToPrint = stringToPrint.Substring(charactersOnPage);
    
        // Check to see if more pages are to be printed.
        e.HasMorePages = (stringToPrint.Length > 0);
    }
    
    Private Sub PrintDocument1_PrintPage(ByVal sender As Object,
    ByVal e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
    
        Dim charactersOnPage As Integer = 0
        Dim linesPerPage As Integer = 0
    
        ' Sets the value of charactersOnPage to the number of characters 
        ' of stringToPrint that will fit within the bounds of the page.
        e.Graphics.MeasureString(stringToPrint, Me.Font, e.MarginBounds.Size,
        StringFormat.GenericTypographic, charactersOnPage, linesPerPage)
    
        ' Draws the string within the bounds of the page
        e.Graphics.DrawString(stringToPrint, Me.Font, Brushes.Black,
        e.MarginBounds, StringFormat.GenericTypographic)
    
        ' Remove the portion of the string that has been printed.
        stringToPrint = stringToPrint.Substring(charactersOnPage)
    
        ' Check to see if more pages are to be printed.
        e.HasMorePages = stringToPrint.Length > 0
    
    End Sub
    

Voir aussi