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());
                }
            }
        }
 public PosicaoDadoCertificadoCertame ObterPorDadoAno(string dado, int ano)
 {
     return(_bmPosicaoDadoCertificadoCertame.ObterPorDadoAno(dado, ano));
 }