예제 #1
0
        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();
                }
            }
        }
예제 #2
0
        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;
                }
            }
        }