Delen via


Een tekstbestand met meerdere pagina's afdrukken (Windows Forms .NET)

Het is gebruikelijk dat windows-toepassingen tekst afdrukken. De klasse Graphics biedt methoden voor het tekenen van objecten (afbeeldingen of tekst) op een apparaat, zoals een scherm of printer. In de volgende sectie wordt het proces voor het afdrukken van een tekstbestand gedetailleerd beschreven. Deze methode biedt geen ondersteuning voor het afdrukken van niet-platte tekstbestanden, zoals een Office Word-document of een PDF--bestand.

Notitie

De DrawText methoden van TextRenderer worden niet ondersteund voor afdrukken. U moet altijd de DrawString methoden van Graphicsgebruiken, zoals wordt weergegeven in het volgende codevoorbeeld, om tekst te tekenen voor afdrukdoeleinden.

Tekst afdrukken

  1. Dubbelklik in Visual Studio op het formulier waaruit u wilt afdrukken, in het deelvenster Solution Explorer. Hiermee opent u de Visual Designer.

  2. Dubbelklik in de Werksetop het PrintDocument onderdeel om het aan het formulier toe te voegen. Hiermee maakt u een PrintDocument onderdeel met de naam printDocument1.

  3. Voeg een Button toe aan het formulier of gebruik een knop die al in het formulier staat.

  4. In de Visual Designer van het formulier, selecteer de knop. Selecteer in het deelvenster Eigenschappen de knop Gebeurtenis filter en dubbelklik vervolgens op de Click gebeurtenis om een gebeurtenis-handler te genereren.

  5. De Click-gebeurteniscode moet zichtbaar zijn. Voeg buiten het bereik van de gebeurtenis-handler een privétekenreeksvariabele toe aan de klasse met de naam stringToPrint.

    private string stringToPrint="";
    
    'Private PrintDocument1 As New PrintDocument()
    Private stringToPrint As String
    
  6. Terug in de code van de Click event handler stel je de eigenschap DocumentName in op de naam van het document. Deze informatie wordt naar de printer verzonden. Lees vervolgens de tekstinhoud van het document en sla deze op in de stringToPrint tekenreeks. Roep ten slotte de Print methode aan om de gebeurtenis PrintPage te genereren. De Print methode is hieronder gemarkeerd.

    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. Ga terug naar Visual Designer van het formulier en selecteer het PrintDocument onderdeel. Selecteer in het deelvenster Eigenschappen het filter Gebeurtenis en dubbelklik op de PrintPage gebeurtenis om een gebeurtenishandler te genereren.

  8. Gebruik in de PrintPage gebeurtenishandler de eigenschap Graphics van de PrintPageEventArgs-klasse en de inhoud van het document om de lengte en regels per pagina te berekenen. Nadat elke pagina is getekend, controleert u of deze de laatste pagina is en stelt u de eigenschap HasMorePages van de PrintPageEventArgs dienovereenkomstig in. De PrintPage gebeurtenis wordt opgeroepen totdat HasMorePages wordt false.

    In het volgende codevoorbeeld wordt de gebeurtenis-handler gebruikt om de inhoud van het bestand 'testPage.txt' af te drukken in hetzelfde lettertype als het bestand dat op het formulier wordt gebruikt.

    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
    

Zie ook