Een tekstbestand met meerdere pagina's afdrukken (Windows Forms .NET)
Het is gebruikelijk dat windows-toepassingen tekst afdrukken. De klasse Graphics biedt methoden voor het tekenen van objecten (afbeeldingen of tekst) op een apparaat, zoals een scherm of printer. In de volgende sectie wordt het proces voor het afdrukken van een tekstbestand gedetailleerd beschreven. Deze methode biedt geen ondersteuning voor het afdrukken van niet-platte tekstbestanden, zoals een Office Word-document of een PDF--bestand.
Notitie
De DrawText methoden van TextRenderer worden niet ondersteund voor afdrukken. U moet altijd de DrawString methoden van Graphicsgebruiken, zoals wordt weergegeven in het volgende codevoorbeeld, om tekst te tekenen voor afdrukdoeleinden.
Tekst afdrukken
Dubbelklik in Visual Studio op het formulier waaruit u wilt afdrukken, in het deelvenster Solution Explorer. Hiermee opent u de Visual Designer.
Dubbelklik in de Werksetop het PrintDocument onderdeel om het aan het formulier toe te voegen. Hiermee maakt u een
PrintDocument
onderdeel met de naamprintDocument1
.Voeg een
Button
toe aan het formulier of gebruik een knop die al in het formulier staat.In de Visual Designer van het formulier, selecteer de knop. Selecteer in het deelvenster Eigenschappen de knop Gebeurtenis filter en dubbelklik vervolgens op de
Click
gebeurtenis om een gebeurtenis-handler te genereren.De
Click
-gebeurteniscode moet zichtbaar zijn. Voeg buiten het bereik van de gebeurtenis-handler een privétekenreeksvariabele toe aan de klasse met de naamstringToPrint
.private string stringToPrint="";
'Private PrintDocument1 As New PrintDocument() Private stringToPrint As String
Terug in de code van de
Click
event handler stel je de eigenschap DocumentName in op de naam van het document. Deze informatie wordt naar de printer verzonden. Lees vervolgens de tekstinhoud van het document en sla deze op in destringToPrint
tekenreeks. Roep ten slotte de Print methode aan om de gebeurtenis PrintPage te genereren. DePrint
methode is hieronder gemarkeerd.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
Ga terug naar Visual Designer van het formulier en selecteer het
PrintDocument
onderdeel. Selecteer in het deelvenster Eigenschappen het filter Gebeurtenis en dubbelklik op dePrintPage
gebeurtenis om een gebeurtenishandler te genereren.Gebruik in de PrintPage gebeurtenishandler de eigenschap Graphics van de PrintPageEventArgs-klasse en de inhoud van het document om de lengte en regels per pagina te berekenen. Nadat elke pagina is getekend, controleert u of deze de laatste pagina is en stelt u de eigenschap HasMorePages van de
PrintPageEventArgs
dienovereenkomstig in. DePrintPage
gebeurtenis wordt opgeroepen totdatHasMorePages
wordtfalse
.In het volgende codevoorbeeld wordt de gebeurtenis-handler gebruikt om de inhoud van het bestand 'testPage.txt' af te drukken in hetzelfde lettertype als het bestand dat op het formulier wordt gebruikt.
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
Zie ook
- Graphics
- Brush
- Overzicht van PrintDialog-onderdelen
.NET Desktop feedback