public void ProcessRequest(HttpContext context) { if (context.Request.IsAuthenticated) { try { var tipRel = HttpUtility.UrlDecode(HttpContext.Current.Request["tipRel"]); var parametrosRel = HttpUtility.UrlDecode(HttpContext.Current.Request["params"]); int rlt_id; if (int.TryParse(tipRel, out rlt_id)) { string mimeType; string encoding; string fileNameExtension; Warning[] warnings; string[] streamids; byte[] exportBytes; //Recebe os dados do relatório CFG_Relatorio rpt = new CFG_Relatorio() { rlt_id = rlt_id }; CFG_RelatorioBO.GetEntity(rpt); if (rpt.IsNew) { throw new ValidationException("Relatório não encontrado."); } //Configurações do Relatório CFG_ServidorRelatorio rptServer = CFG_ServidorRelatorioBO.CarregarServidorRelatorioPorEntidade( this.__SessionWEB.__UsuarioWEB.Usuario.ent_id , ApplicationWEB.AppMinutosCacheLongo ); if (rptServer.IsNew) { throw new ValidationException("O servidor de relatório não está configurado."); } //Carrega os parâmetros do relatório MSReportServerParameters param = new MSReportServerParameters(parametrosRel); //Checa o modo de processamento do servidor if (rptServer.srr_remoteServer) { Microsoft.Reporting.WebForms.ReportViewer ReportViewerRel = new Microsoft.Reporting.WebForms.ReportViewer(); //Configura o reportviewer ReportViewerRel.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote; Uri urlReport = new Uri(rptServer.srr_diretorioRelatorios); ReportViewerRel.ServerReport.ReportServerUrl = urlReport; ReportViewerRel.ServerReport.ReportServerCredentials = new MSReportServerCredentials(rptServer.srr_usuario, rptServer.srr_senha, rptServer.srr_dominio); ReportViewerRel.ServerReport.ReportPath = String.Concat(rptServer.srr_pastaRelatorios, rpt.rlt_nome); ReportViewerRel.ServerReport.SetParameters(param.getReportParameters()); //Carrega o relatório exportBytes = ReportViewerRel.ServerReport.Render("PDF", null, out mimeType, out encoding, out fileNameExtension, out streamids, out warnings); #region PDF Sharp //MemoryStream fs = new MemoryStream(exportBytes); //PdfDocument document = PdfReader.Open(fs, PdfDocumentOpenMode.Modify); //PdfDictionary dictJS = new PdfDictionary(document); //dictJS.Elements["/S"] = new PdfName("/JavaScript"); //dictJS.Elements["/JS"] = new PdfString("this.print(true);\r"); //document.Internals.AddObject(dictJS); //document.Internals.Catalog.Elements["/OpenAction"] = PdfInternals.GetReference(dictJS); //MemoryStream ms = new MemoryStream(); //document.Save(ms, false); #endregion #region ITextSharp MemoryStream ms = new MemoryStream(); PdfReader reader = new PdfReader(exportBytes); Document document = null; PdfCopy writer = null; int n = reader.NumberOfPages; document = new Document(reader.GetPageSizeWithRotation(1)); writer = new PdfCopy(document, ms); document.Open(); PdfImportedPage page; for (int i = 0; i < n;) { ++i; page = writer.GetImportedPage(reader, i); writer.AddPage(page); } PdfAction jAction = PdfAction.JavaScript("this.print(true);\r", writer); writer.AddJavaScript(jAction); document.Close(); writer.Close(); #endregion HttpResponse response = HttpContext.Current.Response; response.ClearContent(); response.ClearHeaders(); response.Buffer = true; response.Cache.SetCacheability(HttpCacheability.Private); response.ContentType = "application/pdf"; response.AddHeader("Content-Disposition", "inline;"); response.BinaryWrite(ms.ToArray()); ms.Close(); HttpContext.Current.ApplicationInstance.CompleteRequest(); response.End(); } } } catch (ThreadAbortException) { } catch (Exception ex) { MSTech.GestaoEscolar.Web.WebProject.ApplicationWEB._GravaErro(ex); } } }
protected void Page_Load(object sender, EventArgs e) { try { if (!IsPostBack) { //recebe valores da sessão e grava em variáveis string tipoRel = CFG_RelatorioBO.CurrentReportID; string parametrosRel = CFG_RelatorioBO.CurrentReportParameters; if (!String.IsNullOrEmpty(tipoRel)) { this.QueryStringUrlReports = "tipRel=" + HttpUtility.UrlEncode(tipoRel) + "¶ms=" + HttpUtility.UrlEncode(parametrosRel); //remove os valores da sessão CFG_RelatorioBO.ClearSessionReportParameters(); //Recebe os dados do relatório CFG_Relatorio rpt = new CFG_Relatorio() { rlt_id = int.Parse(tipoRel) }; CFG_RelatorioBO.GetEntity(rpt); if (rpt.IsNew) { throw new ValidationException("Relatório não encontrado."); } //Configurações do Relatório CFG_ServidorRelatorio rptServer = CFG_ServidorRelatorioBO.CarregarServidorRelatorioPorEntidade( this.__SessionWEB.__UsuarioWEB.Usuario.ent_id , ApplicationWEB.AppMinutosCacheLongo ); if (rptServer.IsNew) { throw new ValidationException("O servidor de relatório não está configurado."); } VerificaAtributosReport(rpt.rlt_id); //Carrega os parâmetros do relatório MSReportServerParameters param = new MSReportServerParameters(parametrosRel); //Verifica se está Habilitada a impressão sem activeX bool bHabilitarImpressaoRel = ACA_ParametroAcademicoBO.ParametroValorBooleanoPorEntidade(eChaveAcademico.HABILITA_IMPRESSAO_RELATORIO , __SessionWEB.__UsuarioWEB.Usuario.ent_id); this.HabilitarImpressaoRel = bHabilitarImpressaoRel; divPdf.Visible = bHabilitarImpressaoRel; ReportViewerRel.ShowPrintButton = !bHabilitarImpressaoRel; //Verifica se usuário vizualizará algum relatório da aba 'DOCUMENTOS' if (_VS_TipoRelatorio == tipoRelatorio.Documento) { // Habilita ou desabilita, conforme configuração do parâmetro HABILITA_EXPORTACAO_IMPRESSAO_DOCUMENTOS, se vai ter botão de exportar documento no ReportView. ReportViewerRel.ShowExportControls = ACA_ParametroAcademicoBO.ParametroValorBooleanoPorEntidade(eChaveAcademico.HABILITA_EXPORTACAO_IMPRESSAO_DOCUMENTOS , __SessionWEB.__UsuarioWEB.Usuario.ent_id); } //Checa o modo de processamento do servidor if (rptServer.srr_remoteServer) { //Configura o reportviewer ReportViewerRel.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote; Uri urlReport = new Uri(rptServer.srr_diretorioRelatorios); ReportViewerRel.ServerReport.ReportServerUrl = urlReport; ReportViewerRel.ServerReport.ReportServerCredentials = new MSReportServerCredentials(rptServer.srr_usuario, rptServer.srr_senha, rptServer.srr_dominio); ReportViewerRel.ServerReport.ReportPath = String.Concat(rptServer.srr_pastaRelatorios, rpt.rlt_nome); ReportViewerRel.ServerReport.SetParameters(param.getReportParameters()); //Recebe as configurações do delegate ConfigRemoteRerpotViewerEvent configRemoteRerpotViewer = Events[ConfigRemoteRerpotViewerKey] as ConfigRemoteRerpotViewerEvent; if (configRemoteRerpotViewer != null) { configRemoteRerpotViewer(ReportViewerRel); } //Carrega o relatório ReportViewerRel.ServerReport.Refresh(); } else { //Configura o reportviewer ReportViewerRel.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local; ReportViewerRel.LocalReport.ReportPath = String.Concat(rptServer.srr_pastaRelatorios, rpt.rlt_nome); ReportViewerRel.LocalReport.SetParameters(param.getReportParameters()); //Recebe as configurações do delegate ConfigLocalRerpotViewerEvent configLocalRerpotViewer = Events[ConfigLocalRerpotViewerKey] as ConfigLocalRerpotViewerEvent; if (configLocalRerpotViewer != null) { configLocalRerpotViewer(ReportViewerRel); } //Carrega o relatório ReportViewerRel.LocalReport.Refresh(); } } else { string nome = _VS_TipoRelatorio == tipoRelatorio.Relatorio ? "relatório" : "documento"; _lblMensagem.Text = UtilBO.GetErroMessage("Não foi possível carregar o " + nome + ". Tipo de relatório indisponível.", UtilBO.TipoMensagem.Informacao); } } this.Page.ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "reports", " var query= '" + this.QueryStringUrlReports + "';", true); } catch (ValidationException ex) { this._TrataErro(ex, ex.Message); } catch (Exception ex) { string nome = _VS_TipoRelatorio == tipoRelatorio.Relatorio ? "relatório" : "documento"; this._TrataErro(ex, "Recurso indisponível ao exibir o " + nome + "."); } }