Compartilhar via


Imprimir um arquivo de texto de várias páginas

É comum que aplicativos baseados no Windows imprimam texto. A classe Graphics fornece métodos para desenhar objetos (elementos gráficos ou texto) para um dispositivo, como uma tela ou impressora. A seção a seguir descreve detalhadamente o processo para imprimir o arquivo de texto. Esse método não dá suporte à impressão de arquivos de texto não simples, como um documento do Office Word ou um arquivo PDF .

Observação

Os métodos de DrawText não têm suporte para impressão. Você sempre deve usar os métodos DrawString de Graphics, conforme mostrado no exemplo de código a seguir, para desenhar texto para fins de impressão.

Para imprimir texto

  1. No Visual Studio, clique duas vezes no formulário do qual você deseja imprimir, no painel do Gerenciador de Soluções . Essa ação abre o Designer Visual.

  2. Na caixa de ferramentas , clique duas vezes no componente PrintDocument para adicioná-lo ao formulário. Essa ação cria um PrintDocument componente com o nome printDocument1.

  3. Adicione um Button ao formulário ou use um botão que já esteja no formulário.

  4. No Designer Visual do formulário, selecione o botão. No painel Propriedades, selecione o botão de filtro de Evento e, em seguida, clique duas vezes no evento Click para gerar um manipulador de eventos.

  5. O código de evento Click deve estar visível. Fora do escopo do manipulador de eventos, adicione uma variável de cadeia de caracteres privada à classe chamada stringToPrint.

    private string stringToPrint="";
    
    'Private PrintDocument1 As New PrintDocument()
    Private stringToPrint As String
    
  6. De volta ao código do manipulador de eventos Click, defina a propriedade DocumentName como o nome do documento. Essas informações são enviadas para a impressora. Em seguida, leia o conteúdo do texto do documento e armazene-o na cadeia de caracteres stringToPrint. Por fim, chame o método Print para gerar o evento PrintPage. O Print método é realçado no seguinte código:

    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
    
  7. Volte para o Designer Visual do formulário e selecione o componente PrintDocument. No painel Propriedades, selecione o filtro Evento e clique duas vezes no evento PrintPage para gerar um manipulador de eventos.

  8. No manipulador de eventos PrintPage, use a propriedade Graphics da classe PrintPageEventArgs e o conteúdo do documento para calcular o comprimento da linha e as linhas por página. Depois que cada página for desenhada, verifique se ela é a última página e defina a propriedade HasMorePages do PrintPageEventArgs adequadamente. O evento PrintPage é gerado até que HasMorePages seja false.

    No exemplo de código a seguir, o manipulador de eventos é usado para imprimir o conteúdo do arquivo "testPage.txt" na mesma fonte que é 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
    

Consulte também