Partager via


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 (graphiques ou texte) sur un appareil, 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 bruts, tels qu’un document Office Word ou un fichier PDF.

Remarque

Les méthodes DrawText de TextRenderer ne sont pas supportées pour l’impression. Vous devez toujours utiliser les méthodes DrawString de Graphics, comme indiqué dans l’exemple de code suivant, pour dessiner du texte à des fins d’impression.

Pour imprimer du texte

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

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

  3. Ajoutez un Button au 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 de , sélectionnez le bouton Événement filtre, puis double-cliquez sur l’événement pour générer un gestionnaire d’événements.

  5. Le code d’événement Click 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 gestionnaire d’événements Click, définissez la propriété DocumentName 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 chaîne stringToPrint. Enfin, appelez la méthode Print pour déclencher l’événement PrintPage. La méthode Print 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 composant PrintDocument. Dans le volet Propriétés , sélectionnez le filtre d’événement , puis double-cliquez sur l’événement 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 les lignes par page. Une fois chaque page dessinée, vérifiez s’il s’agit de la dernière page et définissez la propriété HasMorePages du PrintPageEventArgs 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