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
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. 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 nomprintDocument1
.Ajoutez un
Button
au formulaire ou utilisez un bouton qui figure déjà sur le formulaire.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énementpour générer un gestionnaire d’événements. 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éestringToPrint
.private string stringToPrint="";
'Private PrintDocument1 As New PrintDocument() Private stringToPrint As String
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înestringToPrint
. Enfin, appelez la méthode Print pour déclencher l’événement PrintPage. La méthodePrint
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
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. 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énementPrintPage
est déclenché jusqu'à ce queHasMorePages
soitfalse
.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
.NET Desktop feedback