Porady: wyświetlanie podglądu wydruku w aplikacjach formularzy systemu Windows
Bardzo 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.
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
PrintDocument Dodaj składnik i ciąg do formularza.
private PrintDocument printDocument1 = new PrintDocument(); private string stringToPrint;
Private printDocument1 As New PrintDocument() Private stringToPrint As String
W przypadku drukowania dokumentu ustaw DocumentName właściwość na dokument, który chcesz wydrukować, i otwórz i odczytaj zawartość dokumentów do dodanego wcześniej ciągu.
string docName = "testPage.txt"; string docPath = @"c:\"; printDocument1.DocumentName = docName; using (FileStream stream = new FileStream(docPath + docName, FileMode.Open)) using (StreamReader reader = new StreamReader(stream)) { stringToPrint = reader.ReadToEnd(); }
Dim docName As String = "testPage.txt" Dim docPath As String = "c:\" printDocument1.DocumentName = docName Dim stream As New FileStream(docPath + docName, FileMode.Open) Try Dim reader As New StreamReader(stream) Try stringToPrint = reader.ReadToEnd() Finally reader.Dispose() End Try Finally stream.Dispose() End Try
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
. Upewnij się również, że PrintPage zdarzenie jest skojarzone z metodą obsługi zdarzeń.W poniższym przykładzie kodu program obsługi zdarzeń jest używany do drukowania zawartości pliku "testPage.txt" w tej samej czcionki, co jest używane w formularzu.
private void printDocument1_PrintPage(object sender, 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) 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
Wywołaj metodę , Print aby zgłosić PrintPage zdarzenie.
printDocument1.Print();
printDocument1.Print()
Przykład
using System;
using System.Drawing;
using System.IO;
using System.Drawing.Printing;
using System.Windows.Forms;
namespace PrintApp
{
public class Form1 : Form
{
private Button printButton;
private PrintDocument printDocument1 = new PrintDocument();
private string stringToPrint;
public Form1()
{
this.printButton = new System.Windows.Forms.Button();
this.printButton.Location = new System.Drawing.Point(12, 51);
this.printButton.Size = new System.Drawing.Size(75, 23);
this.printButton.Text = "Print";
this.printButton.Click += new System.EventHandler(this.printButton_Click);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.printButton);
// Associate the PrintPage event handler with the PrintPage event.
printDocument1.PrintPage +=
new PrintPageEventHandler(printDocument1_PrintPage);
}
private void ReadFile()
{
string docName = "testPage.txt";
string docPath = @"c:\";
printDocument1.DocumentName = docName;
using (FileStream stream = new FileStream(docPath + docName, FileMode.Open))
using (StreamReader reader = new StreamReader(stream))
{
stringToPrint = reader.ReadToEnd();
}
}
private void printDocument1_PrintPage(object sender, 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 void printButton_Click(object sender, EventArgs e)
{
ReadFile();
printDocument1.Print();
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
Imports System.Drawing
Imports System.IO
Imports System.Drawing.Printing
Imports System.Windows.Forms
Public Class Form1
Inherits Form
Private printButton As Button
Private printDocument1 As New PrintDocument()
Private stringToPrint As String
Public Sub New()
Me.printButton = New System.Windows.Forms.Button()
Me.printButton.Location = New System.Drawing.Point(12, 51)
Me.printButton.Size = New System.Drawing.Size(75, 23)
Me.printButton.Text = "Print"
Me.ClientSize = New System.Drawing.Size(292, 266)
End Sub
Private Sub ReadFile()
Dim docName As String = "testPage.txt"
Dim docPath As String = "c:\"
printDocument1.DocumentName = docName
Dim stream As New FileStream(docPath + docName, FileMode.Open)
Try
Dim reader As New StreamReader(stream)
Try
stringToPrint = reader.ReadToEnd()
Finally
reader.Dispose()
End Try
Finally
stream.Dispose()
End Try
End Sub
Private Sub printDocument1_PrintPage(ByVal sender As Object, _
ByVal e As PrintPageEventArgs)
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
Private Sub printButton_Click(ByVal sender As Object, ByVal e As EventArgs)
ReadFile()
printDocument1.Print()
End Sub
<STAThread()> _
Shared Sub Main()
Application.EnableVisualStyles()
Application.SetCompatibleTextRenderingDefault(False)
Application.Run(New Form1())
End Sub
End Class
Kompilowanie kodu
Ten przykład wymaga:
Plik tekstowy o nazwie testPage.txt zawierający tekst do wydrukowania znajdujący się w katalogu głównym dysku C:\. Edytuj kod, aby wydrukować inny plik.
Odwołania do zestawów System, System.Windows.Forms, System.Drawing.
Aby uzyskać informacje na temat kompilowania tego przykładu z wiersza polecenia dla języka Visual Basic lub Visual C#, zobacz Kompilowanie z wiersza polecenia lub kompilowania wiersza polecenia za pomocą pliku csc.exe. Możesz również skompilować ten przykład w programie Visual Studio, wklejając kod do nowego projektu.
Zobacz też
.NET Desktop feedback