private static void DesenharTabela(XGraphics gfx, UsuarioCertificadoCertame certificadoUsuario, PdfPage pagina) { var pen = new XPen(XColor.FromName("black")); double topoTabela = 250; DesenharCelula(gfx, 10, topoTabela, 220, 20, pen, "Área", true); DesenharCelula(gfx, 220, topoTabela, 440, 20, pen, "Situação de Comparecimento", true); DesenharCelula(gfx, 440, topoTabela, 500, 20, pen, "Nota", true); DesenharCelula(gfx, 500, topoTabela, 585, 20, pen, "Situação", true); topoTabela += 20; DesenharCelula(gfx, 10, topoTabela, 220, 20, pen, certificadoUsuario.CertificadoCertame.NomeCertificado); DesenharCelula(gfx, 220, topoTabela, 440, 20, pen, certificadoUsuario.Situacao?.GetDescription()); DesenharCelula(gfx, 440, topoTabela, 500, 20, pen, certificadoUsuario.Nota?.ToString("0.00") ?? "0.00"); DesenharCelula(gfx, 500, topoTabela, 585, 20, pen, $"{certificadoUsuario.Status.GetDescription()}"); var medidaJustificativa = gfx.MeasureString(certificadoUsuario.Justificativa ?? " ", new XFont("Verdana", 12)); var alturaJustificativa = medidaJustificativa.Height * Math.Ceiling(medidaJustificativa.Width / 585); topoTabela = pagina.Height - 50 - alturaJustificativa; DesenharCelula(gfx, 10, topoTabela, 585, 20, pen, "Resultado da apresentação de justificativa à ausência no dia da prova", true, true); topoTabela += 20; DesenharCelula(gfx, 10, topoTabela, 585, alturaJustificativa, pen, certificadoUsuario.Justificativa); }
private static void EscreverVerso(PdfDocument outputDocument, XPdfForm form, UsuarioCertificadoCertame certificadoUsuario, XFont font, XStringFormat format) { if (form.PageCount > 1) { var paginaVerso = outputDocument.AddPage(); paginaVerso.Orientation = PageOrientation.Landscape; paginaVerso.Size = PageSize.A4; form.PageNumber = 2; var posicaoId = new BMPosicaoDadoCertificadoCertame().ObterPorDadoAno("id", certificadoUsuario.CertificadoCertame.Ano); if (posicaoId == null) { throw new Exception("Posição de dado obrigatório não informada no verso"); } var gfx = XGraphics.FromPdfPage(paginaVerso); gfx.DrawImage(form, new XRect(0, 0, form.PointWidth, form.PointHeight)); EscreverDado(paginaVerso, posicaoId, gfx, font, format, certificadoUsuario.Chave); } }
private static void EscreverFrente(PdfDocument outputDocument, XPdfForm form, UsuarioCertificadoCertame certificadoUsuario, XFont font, XStringFormat format) { var paginaFrente = outputDocument.AddPage(); paginaFrente.Orientation = PageOrientation.Landscape; paginaFrente.Size = PageSize.A4; form.PageNumber = 1; var manterPosicaoDado = new BMPosicaoDadoCertificadoCertame(); var posicaoNome = manterPosicaoDado.ObterPorDadoAno("nome", certificadoUsuario.CertificadoCertame.Ano); var posicaoCpf1 = manterPosicaoDado.ObterPorDadoAno("cpf1", certificadoUsuario.CertificadoCertame.Ano); var posicaoCpf2 = manterPosicaoDado.ObterPorDadoAno("cpf2", certificadoUsuario.CertificadoCertame.Ano); if (posicaoNome == null || posicaoCpf1 == null || posicaoCpf2 == null) { throw new Exception("Posição de dado obrigatório não informada na frente"); } var gfx = XGraphics.FromPdfPage(paginaFrente); gfx.DrawImage(form, new XRect(0, 0, form.PointWidth, form.PointHeight)); EscreverDado(paginaFrente, posicaoNome, gfx, font, format, certificadoUsuario.Usuario.Nome); EscreverDado(paginaFrente, posicaoCpf1, gfx, font, format, certificadoUsuario.Usuario.CPF.Substring(0, 9).Insert(3, ".").Insert(7, ".")); EscreverDado(paginaFrente, posicaoCpf2, gfx, font, format, certificadoUsuario.Usuario.CPF.Substring(9, 2)); if (certificadoUsuario.CertificadoCertame.Data.HasValue) { var data = certificadoUsuario.CertificadoCertame.Data.Value; var dataFormatada = string.Format("{0} de {1} de {2}", data.Day.ToString().PadLeft(2, '0'), data.ObterNomeMes(), data.Year); var posicaoData = manterPosicaoDado.ObterPorDadoAno("data", certificadoUsuario.CertificadoCertame.Ano); EscreverDado(paginaFrente, posicaoData, gfx, font, format, dataFormatada); } if (!string.IsNullOrWhiteSpace(certificadoUsuario.CertificadoCertame.NomeCertificado)) { var posicaoNomeCertificado = manterPosicaoDado.ObterPorDadoAno("nomecertificado", certificadoUsuario.CertificadoCertame.Ano); // Somente nesse caso, só insere o nome no PDF caso tenha o dado, pois alguns PDFs possuem o // nome neles, mas o campo "Nome" é obrigatório em todos os certificados. if (posicaoNomeCertificado != null) { var fontNomeCertificado = new XFont("Verdana", 13, XFontStyle.Bold); EscreverDado(paginaFrente, posicaoNomeCertificado, gfx, fontNomeCertificado, format, certificadoUsuario.CertificadoCertame.NomeCertificado.ToUpper()); } } }
private static byte[] GerarBoletim(UsuarioCertificadoCertame certificadoUsuario, string repostorioArquivo, DateTime horaAtual) { var outputDocument = new PdfDocument { PageLayout = PdfPageLayout.SinglePage }; var font = new XFont("Verdana", 12); var fontBold = new XFont("Verdana", 12, XFontStyle.Bold); var centerFormat = new XStringFormat { Alignment = XStringAlignment.Center, LineAlignment = XLineAlignment.Center }; var leftFormat = new XStringFormat { Alignment = XStringAlignment.Near, LineAlignment = XLineAlignment.Center }; var pagina = outputDocument.AddPage(); pagina.Orientation = PageOrientation.Portrait; pagina.Size = PageSize.A4; var gfx = XGraphics.FromPdfPage(pagina); // Desenhar a logo do CESPE. gfx.DrawImage(XImage.FromFile(Path.Combine(repostorioArquivo, "BoletinsCertame", "cespe.png")), new XRect(new XPoint(10, 10), new XPoint(130, 50))); // Desenhar data e hora gfx.DrawString(horaAtual.ToString("G", new CultureInfo("pt-BR")), new XFont("Verdana", 8), XBrushes.Black, pagina.Width / 2, 10, centerFormat); // Desenhar cabeçalho. gfx.DrawString("SEBRAE NACIONAL - Serviço de Apoio às Micro e Pequenas Empresas", font, XBrushes.Black, pagina.Width / 2, 70, centerFormat); gfx.DrawString($"CERTIFICAÇÃO INTERNA DE CONHECIMENTOS - {certificadoUsuario.CertificadoCertame.Ano}", font, XBrushes.Black, pagina.Width / 2, 90, centerFormat); gfx.DrawString("ESPELHO DE DESEMPENHO", font, XBrushes.Black, pagina.Width / 2, 110, centerFormat); // Desenhar dados do usuário gfx.DrawString("Nome:", fontBold, XBrushes.Black, 50, 140, leftFormat); gfx.DrawString(certificadoUsuario.Usuario.Nome, font, XBrushes.Black, 130, 140, leftFormat); gfx.DrawString("CPF:", fontBold, XBrushes.Black, 50, 160, leftFormat); gfx.DrawString(certificadoUsuario.Usuario.CPF, font, XBrushes.Black, 130, 160, leftFormat); gfx.DrawString("Inscrição:", fontBold, XBrushes.Black, 50, 180, leftFormat); gfx.DrawString(certificadoUsuario.NumeroInscricao ?? "", font, XBrushes.Black, 130, 180, leftFormat); gfx.DrawString("Unidade:", fontBold, XBrushes.Black, 50, 200, leftFormat); gfx.DrawString(certificadoUsuario.Usuario.Unidade ?? "", font, XBrushes.Black, 130, 200, leftFormat); // Desenhar a tabela. DesenharTabela(gfx, certificadoUsuario, pagina); var streamOutput = new MemoryStream(); outputDocument.Save(streamOutput, false); return(streamOutput.ToArray()); }