protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { if (Request.QueryString["demanda"] == null) { Response.Redirect("HistoricoDemandas.aspx"); return; } Id = int.Parse(Request.QueryString["demanda"]); processo = new BMProcessoResposta().ObterPorId(Id); var analisarEtapasProcesso = new ManterProcesso().AnalisarEtapasProcesso(Id, processo.Usuario.CPF); //lblJustificativaCancelamentoRodape.Text = ""; lblProcesso.Text = processo.Processo.Nome; lblDemandante.Text = processo.Usuario.Nome; lblNumeroDemanda.Text = processo.ID.ToString(); if (!string.IsNullOrEmpty(processo.JustificativaCancelamento)) { pnlJustificativa.Visible = true; txtCancelamento = lblJustificativaCancelamento.Text = processo.JustificativaCancelamento; } ViewState["larguraCampo"] = 0; //Reapeat Abas rptEtapasTab.DataSource = analisarEtapasProcesso.ListaEtapas; rptEtapasTab.DataBind(); //Repeat Content rptEtapas.DataSource = analisarEtapasProcesso.ListaEtapas; rptEtapas.DataBind(); } }
/// <summary> /// TODO: Separa função de PDF em helper de Demandas /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnPdf_Click(object sender, EventArgs e) { var linkButton = sender as LinkButton; if (linkButton == null) { return; } var idProcessoResposta = int.Parse(linkButton.CommandArgument); var listaProcesso = new Sebrae.Academico.BP.Services.SgusWebService.ManterProcesso().ObterDetalhamentoProcesso(idProcessoResposta); // Create a new PDF document var document = new PdfDocument(); var qtdEtapa = 0; var alturaLinha = 20; var margin = 30; var tamanhoTituloEtapa = 70; var posicaoInicialEtapa = 100; var padding = margin + 5; var alturaMaximaBlocoCampos = 700; foreach (var etapa in listaProcesso.Etapas) { // Create an empty page var page = document.AddPage(); page.Size = PdfSharp.PageSize.A4; page.Orientation = PdfSharp.PageOrientation.Portrait; // Get an XGraphics object for drawing var gfx = XGraphics.FromPdfPage(page); // Create a font var font = new XFont("Verdana", 10); var textFormatter = new XTextFormatter(gfx); var gruposCampos = new List <DTOBlocoCampo>(); var grupoIndex = 0; var alturaBloco = 0; foreach (var campo in etapa.ListaCampos) { var alturaCampo = CalcularAlturaCampo(gfx.MeasureString(campo.Titulo + ": " + campo.Resposta, font).Width, (int)page.Width, alturaLinha); alturaBloco += alturaCampo; // Atualizar a altura do bloco. if (gruposCampos.Any() && gruposCampos[grupoIndex] != null) { var altura = gruposCampos[grupoIndex].AlturaBloco; var novaAltura = alturaBloco + (gruposCampos[grupoIndex].PossuiEspacoAntes ? tamanhoTituloEtapa : 0); gruposCampos[grupoIndex].AlturaBloco = altura > novaAltura ? altura : novaAltura; } // Verificar se o bloco possui espaço antes, para as informações da Etapa. var possuiEspacoAntes = true; // Se os campos atingirem o limite da exibição, pular para a próxima página. // Dá um espaço em cima de 3 linhas para o conteúdo da etapa. if (alturaBloco > (alturaMaximaBlocoCampos - (alturaLinha * 3))) { alturaBloco = 0; grupoIndex++; possuiEspacoAntes = false; } if (gruposCampos.Count() != grupoIndex + 1) { gruposCampos.Add(new DTOBlocoCampo(possuiEspacoAntes, tamanhoTituloEtapa + alturaBloco)); } gruposCampos[grupoIndex].Campos.Add(campo); } foreach (var grupoCampos in gruposCampos) { gfx.DrawRectangle(XPens.Black, XBrushes.White, new XRect(alturaLinha, grupoCampos.PossuiEspacoAntes ? posicaoInicialEtapa : 20, page.Width - 45, grupoCampos.AlturaBloco)); if (gruposCampos.IndexOf(grupoCampos) == 0) { EscreverHeaderEtapa(textFormatter, idProcessoResposta, listaProcesso, page, font, qtdEtapa, etapa, padding, grupoCampos.PossuiEspacoAntes ? posicaoInicialEtapa : 20, alturaLinha, gfx); } //Campos var qtdCampos = 0; foreach (var campo in grupoCampos.Campos) { // Escrever dados do Campo. EscreverCampo(campo, gfx, font, page, alturaLinha, textFormatter, padding, posicaoInicialEtapa, qtdCampos, tamanhoTituloEtapa, grupoCampos.PossuiEspacoAntes); qtdCampos++; } // Se não for a última página, adiciona mais uma página ao PDF. if (gruposCampos.IndexOf(grupoCampos) != gruposCampos.Count() - 1) { page = document.AddPage(); gfx = XGraphics.FromPdfPage(page); textFormatter = new XTextFormatter(gfx); } } // Dar continuidade ao número da etapa. qtdEtapa++; } var streamOutput = new MemoryStream(); document.Save(streamOutput, false); Response.AddHeader("Content-Disposition", "attachment; filename=historicoDemanda_" + idProcessoResposta + ".pdf"); Response.ContentType = "application/pdf"; Response.BinaryWrite(streamOutput.ToArray()); Response.Flush(); }