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
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.
No painel Caixa de Ferramentas , clique duas vezes no componente e no PrintDocumentPrintPreviewDialog componente para adicioná-los ao formulário.
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 duas variáveis de cadeia de caracteres privadas à classe nomeadadocumentContents
estringToPrint
:// 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
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)
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 HasMorePages
PrintPageEventArgs
propriedade do correspondente. OPrintPage
evento é levantado atéHasMorePages
que sejafalse
. Após a renderização do documento ser concluída, redefina a cadeia de caracteres a ser renderizada. Além disso, verifique se oPrintPage
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
Defina a DocumentPrintPreviewDialog propriedade do controle para o PrintDocument componente no formulário.
printPreviewDialog1.Document = printDocument1;
PrintPreviewDialog1.Document = PrintDocument1
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
PrintPreviewDialog
PrintPage controle. Quando o usuário seleciona o ícone de impressão na caixa de diálogo, oPrintPage
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
.NET Desktop feedback
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de