Drucken einer mehrseitigen Textdatei (Windows Forms .NET)

Bei Windows-basierten Anwendungen ist es üblich, Text zu drucken. Die Graphics-Klasse stellt Methoden bereit, mit denen Objekte (Grafik oder Text) auf einem Gerät, z. B. auf einem Bildschirm oder Drucker, gezeichnet werden können. Im folgenden Abschnitt wird das Verfahren zum Drucken einer Textdatei ausführlich beschrieben. Diese Methode unterstützt nicht das Drucken von Nicht-Nur-Text-Dateien, z. B. ein Office Word-Dokument oder eine PDF-Datei.

Hinweis

Die DrawTextt-Methoden von TextRenderer werden zum Drucken nicht unterstützt. Sie sollten zu druckenden Text stets mit den DrawString-Methoden von Graphics zeichnen (siehe folgendes Codebeispiel).

So drucken Sie Text

  1. Doppelklicken Sie in Visual Studio im Bereich Projektmappen-Explorer auf das Formular, aus dem Sie drucken möchten. Dadurch wird der Visual Designer geöffnet.

  2. Doppelklicken Sie in der Toolbox auf die PrintDocument-Komponente, um sie dem Formular hinzuzufügen. Dadurch sollte eine PrintDocument-Komponente mit dem Namen printDocument1 erstellt werden.

  3. Fügen Sie dem Formular entweder eine Button hinzu, oder verwenden Sie eine Schaltfläche, die sich bereits auf dem Formular befindet.

  4. Wählen Sie im Visual Designer des Formulars die Schaltfläche aus. Wählen Sie im Bereich Eigenschaften die Filterschaltfläche Ereignis aus, und doppelklicken Sie dann auf das Ereignis Click, um einen Ereignishandler zu generieren.

  5. Der Click-Ereigniscode sollte angezeigt werden. Fügen Sie außerhalb des Ereignishandlers eine private Zeichenfolgenvariable zur Klasse namens stringToPrint hinzu.

    private string stringToPrint="";
    
    'Private PrintDocument1 As New PrintDocument()
    Private stringToPrint As String
    
  6. Zurück im Click-Ereignishandlercode legen Sie die DocumentName-Eigenschaft auf den Namen des Dokuments fest. Diese Informationen werden an den Drucker gesendet. Als nächstes lesen Sie den Textinhalt des Dokuments und speichern ihn in der Zeichenfolge stringToPrint. Rufen Sie schließlich die Print-Methode auf, um das PrintPage-Ereignis auszulösen. Die Print-Methode ist unten hervorgehoben.

    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. Wechseln Sie zurück zum Visual Designer des Formulars, und wählen Sie die PrintDocument-Komponente aus. Wählen Sie im Bereich Eigenschaften den Filter Ereignis aus, und doppelklicken Sie dann auf das Ereignis PrintPage, um einen Ereignishandler zu generieren.

  8. Verwenden Sie im PrintPage-Ereignishandler die Graphics-Eigenschaft der PrintPageEventArgs-Klasse und den Inhalt des Dokuments zum Berechnen der Zeilenlänge und der Anzahl der Zeilen pro Seite. Nachdem eine Seite gezeichnet ist, überprüfen Sie, ob sie die letzte Seite ist, und legen Sie die HasMorePages-Eigenschaft von PrintPageEventArgs entsprechend fest. Das PrintPage -Ereignis wird solange ausgelöst, bis HasMorePages den Wert falsehat.

    Im folgenden Codebeispiel wird der Ereignishandler zum Drucken des Inhalts der Datei „testPage.txt“ mit der im Formular verwendeten Schriftart verwendet.

    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
    

Siehe auch