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
W programie Visual Studio kliknij dwukrotnie formularz, który chcesz wydrukować, w okienku Eksplorator rozwiązań. To otwiera projektanta wizualnego.
W przyborniku kliknij dwukrotnie składnik PrintDocument, aby dodać go do formularza. Powinno to spowodować utworzenie składnika
PrintDocument
o nazwieprintDocument1
.Dodaj
Button
do formularza lub użyj przycisku znajdującego się już w formularzu.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ń. Kod zdarzenia
Click
powinien być widoczny. Poza zakresem procedury obsługi zdarzeń dodaj prywatną zmienną typu string do klasy o nazwiestringToPrint
.private string stringToPrint="";
'Private PrintDocument1 As New PrintDocument() Private stringToPrint As String
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ągustringToPrint
. 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
Wróć do projektanta wizualnego formularza i wybierz składnik
PrintDocument
. W okienku Właściwości wybierz filtr wydarzeń, a następnie kliknij dwukrotnie zdarzeniePrintPage
, aby wygenerować procedurę obsługi zdarzenia.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
. ZdarzeniePrintPage
jest zgłaszane dopókiHasMorePages
nie zostaniefalse
.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ż
- Graphics
- Brush
- Omówienie komponentu PrintDialog
.NET Desktop feedback