Drukowanie wielostronicowego pliku tekstowego (Windows Forms .NET)

Często aplikacje oparte na systemie Windows mogą drukować tekst. Klasa Graphics udostępnia metody rysowania obiektów (grafiki lub tekstu) na urządzeniu, takich jak ekran lub drukarka. W poniższej sekcji opisano szczegółowo proces drukowania pliku tekstowego. Ta metoda nie obsługuje drukowania plików niezwiązanych z tekstem , takich jak dokument programu Office Word lub plik PDF .

Uwaga

Metody DrawTextTextRenderer nie są obsługiwane do drukowania. Zawsze należy używać DrawString metod Graphics, jak pokazano w poniższym przykładzie kodu, aby narysować tekst do celów drukowania.

Aby wydrukować tekst

  1. W programie Visual Studio kliknij dwukrotnie formularz, z którego chcesz wydrukować, w okienku Eksplorator rozwiązań. Spowoduje to otwarcie Projektant wizualizacji.

  2. W przyborniku kliknij PrintDocument dwukrotnie składnik, aby dodać go do formularza. Powinno to utworzyć PrintDocument składnik o nazwie printDocument1.

  3. Dodaj element Button do formularza lub użyj przycisku znajdującego się już w formularzu.

  4. W Projektant wizualizacji formularza wybierz przycisk . W okienku Właściwości wybierz przycisk Filtr zdarzeń , a następnie kliknij Click dwukrotnie zdarzenie, aby wygenerować procedurę obsługi zdarzeń.

  5. Kod Click zdarzenia powinien być widoczny. Poza zakresem programu obsługi zdarzeń dodaj zmienną ciągu prywatnego do klasy o nazwie stringToPrint.

    private string stringToPrint="";
    
    'Private PrintDocument1 As New PrintDocument()
    Private stringToPrint As String
    
  6. Po powrocie Click do kodu procedury obsługi zdarzeń ustaw DocumentName właściwość na nazwę dokumentu. Te informacje są wysyłane do drukarki. Następnie odczytaj zawartość tekstową dokumentu i zapisz ją w stringToPrint ciągu. Na koniec wywołaj metodę Print , aby zgłosić PrintPage zdarzenie. Poniżej Print wyróżniono metodę .

    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. Wróć do Projektant wizualizacji formularza i wybierz PrintDocument składnik. W okienku Właściwości wybierz filtr Zdarzenia , a następnie kliknij PrintPage dwukrotnie zdarzenie, aby wygenerować procedurę obsługi zdarzeń.

  8. W procedurze PrintPage obsługi zdarzeń użyj Graphics właściwości PrintPageEventArgs klasy i zawartości dokumentu, aby obliczyć długość wiersza i wiersze na stronę. Po narysaniu każdej strony sprawdź, czy jest to ostatnia strona, i ustaw HasMorePages odpowiednio właściwość PrintPageEventArgs . Zdarzenie PrintPage jest zgłaszane do momentu, aż HasMorePages ma wartość false.

    W poniższym przykładzie kodu program obsługi zdarzeń jest używany do drukowania zawartości pliku "testPage.txt" w tej samej czcionki, która jest używana w formularzu.

    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
    

Zobacz też