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 DrawText TextRenderer 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
W programie Visual Studio kliknij dwukrotnie formularz, z którego chcesz wydrukować, w okienku Eksplorator rozwiązań. Spowoduje to otwarcie Projektant wizualizacji.
W przyborniku kliknij PrintDocument dwukrotnie składnik, aby dodać go do formularza. Powinno to utworzyć
PrintDocument
składnik o nazwieprintDocument1
.Dodaj element
Button
do formularza lub użyj przycisku znajdującego się już w formularzu.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ń.Kod
Click
zdarzenia powinien być widoczny. Poza zakresem programu obsługi zdarzeń dodaj zmienną ciągu prywatnego do klasy o nazwiestringToPrint
.private string stringToPrint="";
'Private PrintDocument1 As New PrintDocument() Private stringToPrint As String
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ą wstringToPrint
ciągu. Na koniec wywołaj metodę Print , aby zgłosić PrintPage zdarzenie. PoniżejPrint
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
Wróć do Projektant wizualizacji formularza i wybierz
PrintDocument
składnik. W okienku Właściwości wybierz filtr Zdarzenia , a następnie kliknijPrintPage
dwukrotnie zdarzenie, aby wygenerować procedurę obsługi zdarzeń.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
. ZdarzeniePrintPage
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ż
.NET Desktop feedback