public void GerarRelatorio(RelatorioLayout modelo) { PdfDocument document = new PdfDocument(); var totalLinhas = modelo.ColunasSet[0].LinhasSet.Count; var numeroDePaginasComTabela = Math.Ceiling((decimal)totalLinhas / NUMERO_DE_REGISTROS_POR_PAGINA); var limite = 0; for (int i = 0; i < numeroDePaginasComTabela; i++) { document.AddPage(); limite += NUMERO_DE_REGISTROS_POR_PAGINA; limite = limite > totalLinhas ? totalLinhas : limite; CriarTabela(ref document, modelo, i, NUMERO_DE_REGISTROS_POR_PAGINA * i, limite); } if (modelo.ImpimirSumario) { CriarSumario(ref document, modelo); } CriarCabecalho(ref document, modelo); CriarRodape(ref document, modelo); Abrir(ref document); }
private void CriarSumario(ref PdfDocument document, RelatorioLayout modelo) { document.AddPage(); var totalRegistros = modelo.ColunasSet.Sum(x => x.LinhasSet.Count) / modelo.ColunasSet.Count; var index = document.Pages.Count - 1; var pagina = document.Pages[index]; Imprimir(ref document, index, "SUMÁRIO", 10, true, 0, INICIO_AREA_Y + 3, AlinhamentoColuna.Centralizado); Imprimir(ref document, index, $"TOTAL DE REGISTROS: {(totalRegistros):D5}", 7, false, 0, INICIO_AREA_Y + 25, AlinhamentoColuna.Centralizado); Imprimir(ref document, index, $"DATA: {DateTime.Now.ToShortDateString()}", 7, false, 0, INICIO_AREA_Y + 40, AlinhamentoColuna.Centralizado); }
private void CriarCabecalho(ref PdfDocument document, RelatorioLayout modelo) { for (int i = 0; i < document.Pages.Count; ++i) { if (modelo.ImprimirRodape != TipoDeImpressao.ApenasPrimeiraPagina || i == 0) { var periodo = $"Período: {modelo.DataInicial.ToShortDateString()} até {modelo.DataFinal.ToShortDateString()}"; Imprimir(ref document, i, modelo.Titulo, 16, true, 0, 30, AlinhamentoColuna.Centralizado); Imprimir(ref document, i, periodo, 7, false, 0, 60, AlinhamentoColuna.Centralizado); } } }
private void CriarRodape(ref PdfDocument document, RelatorioLayout modelo) { var totalPagina = document.Pages.Count; for (int i = 0; i < document.Pages.Count; ++i) { if (modelo.ImprimirRodape != TipoDeImpressao.ApenasPrimeiraPagina || i == 0) { var pagina = document.Pages[i]; var rodape = $"Relatório emitido em: {DateTime.Now.ToShortDateString()} às {DateTime.Now.ToShortTimeString()}{new string(' ', 150)}"; rodape += $"Página {(i + 1):D3} de {(totalPagina):D3}."; Imprimir(ref document, i, rodape, 7, false, 0, (int)pagina.Height - 40, AlinhamentoColuna.Centralizado); } } }
private void CriarTabela(ref PdfDocument document, RelatorioLayout modelo, int pagina = 0, int inicio = 0, int limite = 0) { var alturaColuna = 15; var colunaPosicaoX = 30; var colunaPosicaoY = INICIO_AREA_Y; var linhaY = colunaPosicaoY + alturaColuna; foreach (var m in modelo.ColunasSet) { ImprimirRetangulo(ref document, pagina, colunaPosicaoX, colunaPosicaoY, m, m.Titulo, m.Alinhamento, true, alturaColuna); for (var j = inicio; j < limite; j++) { ImprimirRetangulo(ref document, pagina, colunaPosicaoX, linhaY, m, m.LinhasSet[j], m.Alinhamento, false, alturaColuna); linhaY += alturaColuna; } linhaY = colunaPosicaoY + alturaColuna; colunaPosicaoX += m.TamanhoColuna; } }