Печать многостраничного текстового файла (Windows Forms .NET)
Обычно приложения на основе Windows печатают текст. Класс Graphics предоставляет методы рисования объектов (графики или текста) устройству, например экрана или принтера. В следующем разделе подробно описывается процесс печати текстового файла. Этот метод не поддерживает печать неструктурированных текстовых файлов, таких как документ Office Word или PDF-файл.
Заметка
Методы DrawText у TextRenderer не поддерживаются для печати. Для рисования текста в целях печати всегда следует использовать методы DrawStringGraphics, как показано в следующем примере кода.
Печать текста
В Visual Studio дважды щелкните форму, которую вы хотите распечатать, в панели обозревателя решений. Откроется визуальный конструктор.
Впанели элементов
дважды щелкните компонент , чтобы добавить его в форму. Это должно создать компонент PrintDocument
с именемprintDocument1
.Добавьте
Button
в форму или нажмите кнопку, которая уже находится в форме.В визуальном конструкторе формы нажмите кнопку. В области свойств нажмите кнопку фильтрации событий , а затем дважды щелкните событие
Click
, чтобы создать обработчик события.Код события
Click
должен быть видимым. Вне области обработчика событий добавьте в класс с именемstringToPrint
частную строковую переменную.private string stringToPrint="";
'Private PrintDocument1 As New PrintDocument() Private stringToPrint As String
Вернитесь в код обработчика событий
Click
, задайте для свойства DocumentName имя документа. Эти сведения отправляются на принтер. Затем прочитайте текстовое содержимое документа и сохраните его в строкеstringToPrint
. Наконец, вызовите метод Print, чтобы вызвать событие PrintPage. Ниже выделен метод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
Вернитесь в визуальный конструктор формы и выберите компонент
PrintDocument
. На панели свойстввыберите фильтр событий , а затем дважды щелкните событие , чтобы создать обработчик события. В обработчике событий PrintPage используйте свойство Graphics класса PrintPageEventArgs и содержимого документа для вычисления длины и строк на страницу. После рисования каждой страницы проверьте, является ли она последней и задайте свойство HasMorePages
PrintPageEventArgs
соответствующим образом. СобытиеPrintPage
вызывается доHasMorePages
false
.В следующем примере кода обработчик событий используется для печати содержимого файла "testPage.txt" в том же шрифте, что и в форме.
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
См. также
.NET Desktop feedback