예제 #1
0
        private void btnImprime_Click(object sender, EventArgs e)
        {
            // Cria um Documento com 250 Linhas
            string[] TextoParaImpressão = new string[250];

            for (int i = 0; i < 250; i++)
            {
                TextoParaImpressão[i] += "Pontifícia Universidade Católica de Minas Gerais - PUC Minas - Curso de Sistemas de Informação";
            }

            // Chama o Construtor da Classe
            // Como a Classe Impressão tem Herança com PrintDocument, Doc terá acesso a PrintDocument também...
            PrintDocument Doc = new Impressão(TextoParaImpressão);

            Doc.PrintPage += this.Doc_PrintPage;                            // Adiciona o Evento... Quando a Página for Impressa, chamar o Evento Doc_PrintPage !

            PrintDialog Diálogo = new PrintDialog();                        // Mostra a Caixa de Diálogo de Impressão

            Diálogo.Document = Doc;

            //  OK do Usuário?
            if (Diálogo.ShowDialog() == DialogResult.OK)
            {
                if (chkVisualizar.Checked)                                  // É para Visualizar?
                {
                    PrintPreviewDialog PPDLG = new PrintPreviewDialog();    // Mostra
                    PPDLG.Document = Doc;
                    PPDLG.ShowDialog();
                }
                else
                {
                    Doc.Print();                                            // Imprime (Isso chamará o Evento Doc_PrintPage. É ele quem vai imprimir...)
                }
            }
        }
예제 #2
0
        private void Doc_PrintPage(object sender, PrintPageEventArgs e)     // Página a ser Impressa...
        {
            // Recupera o Documento que enviou este Evento...
            Impressão Doc = (Impressão)sender;

            // Define a Fonte e Determina a Altura da Linha
            using (Font Fonte = new Font("Calibri", 10))
            {
                float AlturaLinha = Fonte.GetHeight(e.Graphics);

                // Cria as Variáveis para Tratar a Posição de Impressão na Página
                float x = e.MarginBounds.Left;
                float y = e.MarginBounds.Top;

                // Incrementa o Contador de Páginas
                Doc.NúmeroPágina++;

                // Imprime os Dados que cabem na Página
                // O Loop termina quando a Próxima Linha irá passar a Borda da Margem ou quando não há 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);           // Imprime!

                    // Move para a Próxima Linha
                    Doc.Offset++;

                    // Move uma Linha para baixo (Próxima Linha)
                    y += AlturaLinha;
                }

                if (Doc.Offset < Doc.Texto.GetUpperBound(0))            // Compara
                {
                    // 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;
                }
            }
        }