Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
É comum na programação do Windows Forms oferecer visualização de impressão além dos serviços de impressão. Uma maneira fácil de adicionar visualização de impressão ao seu aplicativo é usar um controle PrintPreviewDialog em combinação com a lógica PrintPage de manipulação de eventos para imprimir um arquivo.
Para visualizar um documento de texto com um controle PrintPreviewDialog
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 Designer Visual.
No painel Caixa de Ferramentas , clique duas vezes no PrintDocument componente e no PrintPreviewDialog componente para adicioná-los ao formulário.
Adicione um
Buttonao formulário ou use um botão que já esteja no formulário.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
Clickpara gerar um manipulador de eventos.O código de evento
Clickdeve estar visível. Fora do escopo do manipulador de eventos, adicione duas variáveis de cadeia de caracteres privadas à classe nomeadadocumentContentsestringToPrint:// 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 StringDe volta ao código do
Clickmanipulador de eventos, defina a DocumentName propriedade para o documento que você deseja imprimir e abra e leia o conteúdo do documento na cadeia de caracteres que você adicionou 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)Como faria para imprimir o documento, no manipulador de eventos PrintPage, use a propriedade Graphics da classe PrintPageEventArgs 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 ela é a última página e ajuste a propriedade HasMorePages de
PrintPageEventArgsde acordo. O eventoPrintPageé gerado até queHasMorePagessejafalse. Quando o documento terminar de renderizar, redefina a cadeia de caracteres a ser renderizada. Além disso, verifique se oPrintPageevento está associado ao método de manipulação de eventos.Observação
Se você implementou a impressão em seu aplicativo, as etapas 5 e 6 podem já ter sido concluídas.
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 SubDefina a propriedade Document do controle PrintPreviewDialog para o componente PrintDocument no formulário.
printPreviewDialog1.Document = printDocument1;PrintPreviewDialog1.Document = PrintDocument1Chame o método ShowDialog no controle PrintPreviewDialog. Observe o código realçado a seguir; normalmente, você chamaria ShowDialog dentro do método de manipulação de eventos de um botão Click. Chamar ShowDialog gera o evento PrintPage e renderiza a saída para o controle
PrintPreviewDialog. Quando o usuário seleciona o ícone de impressão na caixa de diálogo, oPrintPageevento é 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 método de manipulação de eventos Click para um botão no formulário. O método de tratamento 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
Consulte também
.NET Desktop feedback