Печать многостраничного текстового файла (Windows Forms .NET)
Обычно приложения на основе Windows печатают текст. Класс Graphics предоставляет методы для рисования объектов (графических или текстовых) на таких устройствах, как экран или принтер. В следующем разделе подробно описывается процесс печати текстового файла. Этот метод не поддерживает печать неструктурированных текстовых файлов, таких как документ Office Word или PDF-файл .
Примечание.
Методы DrawText класса TextRenderer не поддерживаются для печати. Для рисования текста в целях печати следует всегда использовать методы DrawString класса Graphics, как показано в примере кода ниже.
Печать текста
В Visual Studio дважды щелкните форму, из которой вы хотите распечатать, в области Обозреватель решений. Откроется визуальный конструктор.
На панели элементов дважды щелкните PrintDocument компонент, чтобы добавить его в форму. Это должно создать
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
событие, чтобы создать обработчик событий.Чтобы вычислить длину строки и число строк на страницу, в обработчике событий 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