Compartilhar via


Imprimir usando a visualização de impressão (Windows Forms .NET)

É comum na programação do Windows Forms oferecer visualização de impressão, além de serviços de impressão. Uma maneira fácil de adicionar serviços de visualização de impressão ao seu aplicativo é usar um controle em combinação com a PrintPage lógica de manipulação de eventos para imprimir um PrintPreviewDialog arquivo.

Visualizar um documento de texto com um controle PrintPreviewDialog

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

  2. No painel Caixa de Ferramentas , clique duas vezes no componente e no PrintDocumentPrintPreviewDialog componente para adicioná-los ao formulário.

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

  4. 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.

  5. O Click código do evento deve estar visível. Fora do escopo do manipulador de eventos, adicione duas variáveis de cadeia de caracteres privadas à classe nomeada documentContents e stringToPrint:

    // Declare a string to hold the entire document contents.
    private string documentContents="";
    
    // Declare a variable to hold the portion of the document that
    // is not printed.
    private string stringToPrint="";
    
    ' Declare a string to hold the entire document contents.
    Private documentContents As String
    ' Declare a variable to hold the portion of the document that
    ' is not printed.
    Private stringToPrint As String
    
  6. De volta ao código do Click manipulador de eventos, defina a propriedade para o documento que você deseja imprimir e abra e leia o conteúdo do documento para a DocumentName cadeia de caracteres adicionada anteriormente.

    string docName = "testPage.txt";
    string docPath = @"C:\";
    string fullPath = System.IO.Path.Combine(docPath, docName);
    printDocument1.DocumentName = docName;
    stringToPrint = System.IO.File.ReadAllText(fullPath);
    
    Dim docName As String = "testPage.txt"
    Dim docPath As String = "C:\Users\v-rsatao\Desktop\"
    Dim fullPath As String = System.IO.Path.Combine(docPath, docName)
    
    PrintDocument1.DocumentName = docName
    stringToPrint = System.IO.File.ReadAllText(fullPath)
    
  7. Como faria para imprimir o documento, no PrintPage manipulador de eventos, use a GraphicsPrintPageEventArgs propriedade da classe e o conteúdo do arquivo para calcular linhas por página e renderizar o conteúdo do documento. Depois que cada página for desenhada, verifique se é a última página e defina a HasMorePagesPrintPageEventArgs propriedade do correspondente. O PrintPage evento é levantado até HasMorePages que seja false. Após a renderização do documento ser concluída, redefina a cadeia de caracteres a ser renderizada. Além disso, verifique se o PrintPage evento está associado ao seu método de manipulação de eventos.

    Observação

    Se você implementou a impressão em seu aplicativo, talvez já tenha concluído as etapas 5 e 6.

    No exemplo de código a seguir, o manipulador de eventos é usado para imprimir o arquivo “testPage.txt” na mesma fonte usada no formulário.

    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);
    
        // If there are no more pages, reset the string to be printed.
        if (!e.HasMorePages)
            stringToPrint = documentContents;
    }
    
    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
    
        ' If there are no more pages, reset the string to be printed.
        If Not e.HasMorePages Then
            stringToPrint = documentContents
        End If
    
    End Sub
    
  8. Defina a DocumentPrintPreviewDialog propriedade do controle para o PrintDocument componente no formulário.

    printPreviewDialog1.Document = printDocument1;
    
    PrintPreviewDialog1.Document = PrintDocument1
    
  9. Chame PrintPreviewDialog o ShowDialog método no controle. Observe o código realçado fornecido abaixo, você normalmente chamaria ShowDialog a partir do Click método de manipulação de eventos de um botão. A chamada ShowDialog gera o evento e renderiza a saída para o PrintPreviewDialogPrintPage controle. Quando o usuário seleciona o ícone de impressão na caixa de diálogo, o PrintPage evento é gerado novamente, enviando a saída para a impressora em vez da caixa de diálogo de visualização. Portanto, a cadeia de caracteres é redefinida no final do processo de renderização na etapa 4.

    O exemplo de código a seguir mostra o Click método de manipulação de eventos para um botão no formulário. O método de manipulação de eventos chama os métodos para ler o documento e mostrar a caixa de diálogo de visualização de impressão.

    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);
    
        printPreviewDialog1.Document = printDocument1;
    
        printPreviewDialog1.ShowDialog();
    }
    
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
        Dim docName As String = "testPage.txt"
        Dim docPath As String = "C:\Users\v-rsatao\Desktop\"
        Dim fullPath As String = System.IO.Path.Combine(docPath, docName)
    
        PrintDocument1.DocumentName = docName
        stringToPrint = System.IO.File.ReadAllText(fullPath)
    
        PrintPreviewDialog1.Document = PrintDocument1
    
        PrintPreviewDialog1.ShowDialog()
    
    End Sub
    

Confira também