private void bunifuTileButton5_Click(object sender, EventArgs e) { PrintDocument doc = new ImprimirDocumento(textoParaImpressao); doc.PrintPage += this.Doc_PrintPage; PrintDialog dialogo = new PrintDialog(); dialogo.Document = doc; // Se o usuário clicar em OK , imprime o documento if (dialogo.ShowDialog() == DialogResult.OK) { if (chkVisualizaImpressao.Checked) { PrintPreviewDialog ppdlg = new PrintPreviewDialog(); ppdlg.Document = doc; ppdlg.MinimumSize = new System.Drawing.Size(1153, 853); ppdlg.PrintPreviewControl.Zoom = 1f; ppdlg.ShowDialog(); } else { doc.Print(); } } }
private void Doc_PrintPage(object sender, PrintPageEventArgs e) { // Recupera o documento que enviou este evento. ImprimirDocumento doc = (ImprimirDocumento)sender; // Define a fonte e determina a altura da linha using (Font fonte = new Font("Consolas", 14)) { float alturaLinha = fonte.GetHeight(e.Graphics); // Cria as variáveis para tratar a posição na página float x = e.MarginBounds.Left; float y = e.MarginBounds.Top; // Incrementa o contador de página para refletir // a página que esta sendo impressa doc.NumeroPagina += 1; // Imprime toda a informação que cabe na página // O laço termina quando a próxima linha // iria passar a borda da margem ou quando não // houve mais linhas a imprimir while ((y + alturaLinha) < e.MarginBounds.Bottom && doc.Offset <= doc.Texto.GetUpperBound(0)) { e.Graphics.DrawString(doc.Texto[doc.Offset], fonte, Brushes.Black, x, y); // move para a proxima linha doc.Offset += 1; // Move uma linha para baixo (proxima linha) y += alturaLinha; } if (doc.Offset < doc.Texto.GetUpperBound(0)) { // Havendo ainda pelo menos mais uma página. // Sinaliza o evento para disparar novamente e.HasMorePages = true; } else { // A impressão terminou doc.Offset = 0; } } }