Udostępnij za pośrednictwem


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 innych niż zwykły tekst, takich jak dokument Word lub plik PDF.

Notatka

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

Aby wydrukować tekst

  1. W programie Visual Studio kliknij dwukrotnie formularz, który chcesz wydrukować, w okienku Eksplorator rozwiązań. To otwiera projektanta wizualnego.

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

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

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

  5. Kod zdarzenia Click powinien być widoczny. Poza zakresem procedury obsługi zdarzeń dodaj prywatną zmienną typu string do klasy o nazwie stringToPrint.

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

    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 projektanta wizualnego formularza i wybierz składnik PrintDocument. W okienku Właściwości wybierz filtr wydarzeń, a następnie kliknij dwukrotnie zdarzenie PrintPage, aby wygenerować procedurę obsługi zdarzenia.

  8. W programie obsługi zdarzeń PrintPage użyj właściwości Graphics klasy PrintPageEventArgs i zawartości dokumentu, aby obliczyć długość wiersza i wiersze na stronę. Po narysowaniu każdej strony sprawdź, czy jest to ostatnia strona, i odpowiednio zmień właściwość HasMorePages obiektu PrintPageEventArgs. Zdarzenie PrintPage jest zgłaszane dopóki HasMorePages nie zostanie 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ż