Dela via


Skriv ut en textfil med flera sidor (Windows Forms .NET)

Det är vanligt att Windows-baserade program skriver ut text. Klassen Graphics innehåller metoder för ritade objekt (grafik eller text) till en enhet, till exempel en skärm eller skrivare. I följande avsnitt beskrivs i detalj processen för att skriva ut textfilen. Den här metoden stöder inte utskrift av icke-oformaterade textfiler, till exempel ett Office Word-dokument eller en PDF- fil.

Not

Metoderna DrawText för TextRenderer stöds inte för utskrift. Du bör alltid använda DrawString metoder för Graphics, som du ser i följande kodexempel, för att rita text i utskriftssyfte.

Skriva ut text

  1. Dubbelklicka på det formulär som du vill skriva ut från i Solution Explorer fönstret i Visual Studio. Detta öppnar den visuella designern.

  2. Dubbelklicka på komponenten PrintDocument i toolbox-för att lägga till den i formuläret. Detta bör skapa en PrintDocument komponent med namnet printDocument1.

  3. Lägg antingen till en Button i formuläret eller använd en knapp som redan finns i formuläret.

  4. Välj knappen i formulärets visuella designer. I fönstret Egenskaper väljer du filterknappen Händelse och dubbelklickar sedan på händelsen Click för att generera en händelsehanterare.

  5. Händelsekoden Click ska vara synlig. Utanför händelsehanterarens omfång lägger du till en privat strängvariabel i klassen med namnet stringToPrint.

    private string stringToPrint="";
    
    'Private PrintDocument1 As New PrintDocument()
    Private stringToPrint As String
    
  6. Tillbaka i Click händelsehanterarkod, ange egenskapen DocumentName till namnet på dokumentet. Den här informationen skickas till skrivaren. Läs sedan dokumentets textinnehåll och lagra det i strängen stringToPrint. Anropa slutligen metoden Print för att skapa händelsen PrintPage. Metoden Print är markerad nedan.

    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. Gå tillbaka till formulärets visualiseringsdesigner och välj komponenten PrintDocument. I fönstret Egenskaper väljer du filtret Händelse och dubbelklickar sedan på händelsen PrintPage för att generera en händelsehanterare.

  8. I händelsehanteraren PrintPage använder du egenskapen Graphics för klassen PrintPageEventArgs och dokumentinnehållet för att beräkna radlängd och rader per sida. När du har ritat varje sida, kontrollera om det är den sista sidan och ställ in egenskapen HasMorePages för PrintPageEventArgs därefter. Händelsen PrintPage utlöses tills HasMorePages är false.

    I följande kodexempel används händelsehanteraren för att skriva ut innehållet i filen "testPage.txt" med samma teckensnitt som det används i formuläret.

    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
    

Se även