Freigeben über


Drucken einer mehrseitigen Textdatei (Windows Forms .NET)

Es ist üblich, dass Windows-basierte Anwendungen Text drucken. Die Graphics Klasse stellt Methoden zum Zeichnen von Objekten (Grafiken oder Text) auf einem Gerät bereit, z. B. einen Bildschirm oder Drucker. Im folgenden Abschnitt wird der Prozess zum Drucken der Textdatei ausführlich beschrieben. Diese Methode unterstützt nicht das Drucken von nicht-Text-Dateien, z. B., ein Office Word-Dokument oder eine PDF--Datei.

Anmerkung

Die DrawText Methoden von TextRenderer werden für das Drucken nicht unterstützt. Sie sollten immer die DrawString Methoden von Graphicsverwenden, wie im folgenden Codebeispiel gezeigt, um Text für Druckzwecke zu zeichnen.

So drucken Sie Text

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

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

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

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

  5. Der Click Ereigniscode sollte sichtbar sein. Fügen Sie außerhalb des Bereichs des Ereignishandlers eine private Zeichenfolgenvariable zur Klasse stringToPrinthinzu.

    private string stringToPrint="";
    
    'Private PrintDocument1 As New PrintDocument()
    Private stringToPrint As String
    
  6. Gehen Sie zurück zum Click Ereignishandler-Code und legen Sie die Eigenschaft DocumentName auf den Namen des Dokuments fest. Diese Informationen werden an den Drucker gesendet. Lesen Sie als Nächstes den Dokumenttextinhalt, und speichern Sie ihn in der stringToPrint Zeichenfolge. 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 PrintPage Ereignis, um einen Ereignishandler zu generieren.

  8. Verwenden Sie im PrintPage-Ereignishandler die Graphics-Eigenschaft der PrintPageEventArgs Klasse und den Dokumentinhalt, um die Zeilenlänge und Zeilen pro Seite zu berechnen. Überprüfen Sie nach dem Zeichnen jeder Seite, ob es sich um die letzte Seite handelt, und legen Sie die HasMorePages-Eigenschaft des PrintPageEventArgs entsprechend fest. Das PrintPage-Ereignis wird ausgelöst, bis HasMorePages zu falsewird.

    Im folgenden Codebeispiel wird der Ereignishandler verwendet, um den Inhalt der Datei "testPage.txt" in derselben Schriftart zu drucken, wie sie im Formular verwendet wird.

    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