Imprimir um arquivo de texto de várias páginas (Windows Forms .NET)
É comum que aplicativos baseados no Windows imprimam texto. A Graphics classe fornece métodos para desenhar objetos (gráficos ou texto) para um dispositivo, como uma tela ou impressora. A seção a seguir descreve em detalhes o processo para imprimir o arquivo de texto. Esse método não oferece suporte à impressão de arquivos de texto não simples, como um documento do Office Word ou um arquivo PDF .
Observação
Os DrawText métodos de não são suportados TextRenderer para impressão. Você sempre deve usar os DrawString métodos de , conforme mostrado no exemplo de código a seguir, para desenhar texto para fins de Graphicsimpressão.
Imprimir texto
No Visual Studio, clique duas vezes no formulário do qual você deseja imprimir, no painel Gerenciador de Soluções. Isso abre o Visual Designer.
Na caixa de ferramentas, clique duas vezes no PrintDocument componente para adicioná-lo ao formulário. Isso deve criar um
PrintDocument
componente com o nomeprintDocument1
.Adicione um ao formulário ou use um
Button
botão que já esteja no formulário.No Visual Designer do formulário, selecione o botão. No painel Propriedades, selecione o botão Filtro de eventos e clique duas vezes no
Click
evento para gerar um manipulador de eventos.O
Click
código do evento deve estar visível. Fora do escopo do manipulador de eventos, adicione uma variável de cadeia de caracteres privada à classe chamadastringToPrint
.private string stringToPrint="";
'Private PrintDocument1 As New PrintDocument() Private stringToPrint As String
De volta ao código do
Click
manipulador de eventos, defina a DocumentName propriedade como o nome do documento. Essas informações são enviadas para a impressora. Em seguida, leia o conteúdo de texto do documento e armazene-ostringToPrint
na cadeia de caracteres. Finalmente, chame o método para gerar o PrintPrintPage evento. OPrint
método é destacado abaixo.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
Volte para o Visual Designer do formulário e selecione o
PrintDocument
componente. No painel Propriedades, selecione o filtro Evento e clique duas vezes noPrintPage
evento para gerar um manipulador de eventos.PrintPage No manipulador de eventos, use a Graphics propriedade da classe e o conteúdo do documento para calcular o PrintPageEventArgs comprimento da linha e as linhas por página. Depois que cada página for desenhada, verifique se é a última página e defina a HasMorePages
PrintPageEventArgs
propriedade do correspondente. OPrintPage
evento é levantado atéHasMorePages
que sejafalse
.No exemplo de código a seguir, o manipulador de eventos é usado para imprimir o conteúdo do arquivo "testPage.txt" na mesma fonte usada no formulário.
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
Confira também
.NET Desktop feedback