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); } } }
// --------------------------------------------------------------------------- /** * Creates a PDF file with director names. * @param pdf the PDF file to be used as a reader */ public byte[] CreatePdf(byte[] pdf) { byte[] tmpDoc = null; using (MemoryStream ms = new MemoryStream()) { using (Document tmp = new Document()) { PdfWriter writer = PdfWriter.GetInstance(tmp, ms); // step 3 tmp.Open(); // step 4 var SQL = @"SELECT name, given_name FROM film_director ORDER BY name, given_name"; using (var c = AdoDB.Provider.CreateConnection()) { c.ConnectionString = AdoDB.CS; using (DbCommand cmd = c.CreateCommand()) { cmd.CommandText = SQL; c.Open(); using (var r = cmd.ExecuteReader()) { while (r.Read()) { tmp.Add(CreateDirectorParagraph(writer, r)); } } } } } tmpDoc = ms.ToArray(); } jsContents = File.ReadAllText( Path.Combine(Utility.ResourceJavaScript, RESOURCE) ); List <byte[]> readers = new List <byte[]>() { tmpDoc, pdf }; using (MemoryStream ms = new MemoryStream()) { // step 1 using (Document document = new Document()) { // step 2 using (PdfCopy copy = new PdfCopy(document, ms)) { // step 3 document.Open(); // step 4 copy.AddJavaScript(jsContents); for (int i = 0; i < readers.Count; ++i) { PdfReader reader = new PdfReader(readers[i]); int n = reader.NumberOfPages; for (int page = 0; page < n;) { copy.AddPage(copy.GetImportedPage(reader, ++page)); } } } } return(ms.ToArray()); } }