Example #1
0
        /// <summary>
        /// 报表导出
        /// </summary>
        /// <param name="dataSet">数据源</param>
        /// <param name="filePath">模板文件路径</param>
        /// <param name="fileName">文件名称</param>
        /// <param name="exportType">导出类型</param>
        /// <param name="reportParameters">参数</param>
        /// <returns>报表</returns>
        private ActionResult Export(DataSet dataSet, string filePath, string fileName, ExportType exportType, List <ReportParameter> reportParameters)
        {
            var localReport = new LocalReport();

            localReport.SetBasePermissionsForSandboxAppDomain(new PermissionSet(PermissionState.Unrestricted));

            localReport.ReportPath = Server.MapPath(filePath);
            foreach (DataTable dt in dataSet.Tables)
            {
                var reportDataSource = new ReportDataSource(dt.TableName, dt);
                localReport.DataSources.Add(reportDataSource);
            }

            if (reportParameters != null && reportParameters.Count > 0)
            {
                foreach (var reportParameter in reportParameters)
                {
                    localReport.SetParameters(reportParameter);
                }
            }

            string reportType = exportType.ReportType;
            string mimeType;
            string encoding;
            string fileNameExtension;

            string deviceInfo =
                "<DeviceInfo>" +
                "  <OutputFormat>" + exportType.OutputFormat + "</OutputFormat>" +
                "  <PageWidth></PageWidth>" +
                "  <PageHeight></PageHeight>" +
                "  <MarginTop></MarginTop>" +
                "  <MarginLeft></MarginLeft>" +
                "  <MarginRight></MarginRight>" +
                "  <MarginBottom></MarginBottom>" +
                "</DeviceInfo>";

            Warning[] warnings;
            string[]  streams;
            byte[]    renderedBytes;

            renderedBytes = localReport.Render(
                reportType,
                deviceInfo,
                out mimeType,
                out encoding,
                out fileNameExtension,
                out streams,
                out warnings);

            Response.Clear();
            Response.ContentType = exportType.ContentType;
            Response.AddHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + "." + fileNameExtension);
            Response.BinaryWrite(renderedBytes);
            Response.End();

            return(View());
        }
Example #2
0
        private static string PrepareAndGetDeviceInfo(LocalReport report, ReportSettings settings)
        {
            //var customAssemblyName = "Greewf.BaseLibrary, Culture=neutral, PublicKeyToken=ebf2eb006a1f561b";
            //var customAssembly = Assembly.Load(customAssemblyName);
            //StrongName assemblyStrongName = CreateStrongName(customAssembly);
            //report.AddFullTrustModuleInSandboxAppDomain(assemblyStrongName);

            //it seems that the following lines do not need anymore becuase of code sigining. In test senario, it doesn't affect performance.
            PermissionSet permissions = new PermissionSet(PermissionState.Unrestricted);

            report.SetBasePermissionsForSandboxAppDomain(permissions);


            var defaults = report.GetDefaultPageSettings();

            var marginTop    = settings.TopMargin.HasValue ? (settings.TopMargin * (1 / 2.54)) : defaults.Margins.Top / 100.0;
            var marginBottom = settings.BottomMargin.HasValue ? (settings.BottomMargin * (1 / 2.54)) : defaults.Margins.Bottom / 100.0;
            var marginLeft   = settings.LeftMargin.HasValue ? (settings.LeftMargin * (1 / 2.54)) : defaults.Margins.Left / 100.0;
            var marginRight  = settings.RightMargin.HasValue ? (settings.RightMargin * (1 / 2.54)) : defaults.Margins.Right / 100.0;

            settings.EndPage = settings.EndPage ?? settings.StartPage;

            //The DeviceInfo settings should be changed based on the reportType
            // http://msdn2.microsoft.com/en-us/library/ms155397.aspx
            // http://msdn.microsoft.com/en-us/library/hh231593.aspx
            string deviceInfo =
                "<DeviceInfo>" +
                ((settings.DpiX > 0) ? "  <DpiX>" + settings.DpiX + "</DpiX>" : "") +
                ((settings.DpiY > 0) ? "  <DpiY>" + settings.DpiY + "</DpiY>" : "") +
                "  <OutputFormat>" + settings.OutputType + "</OutputFormat>" +
                "  <PageWidth>" + (defaults.IsLandscape ? defaults.PaperSize.Height : defaults.PaperSize.Width) / 100.0 + "in</PageWidth>" +
                "  <PageHeight>" + (defaults.IsLandscape ? defaults.PaperSize.Width : defaults.PaperSize.Height) / 100.0 + "in</PageHeight>" +
                "  <MarginTop>" + marginTop + "in</MarginTop>" +
                "  <MarginLeft>" + marginLeft + "in</MarginLeft>" +
                "  <MarginRight>" + marginRight + "in</MarginRight>" +
                "  <MarginBottom>" + marginBottom + "in</MarginBottom>" +
                "  <StartPage>" + (settings.StartPage ?? 0) + "</StartPage>" +
                "  <EndPage>" + (settings.EndPage ?? 0) + "</EndPage>" +
                "  <PageBreaksMode>OnEachPage</PageBreaksMode>" +
                "  <HumanReadablePDF>" + settings.HumanReadablePdf.ToString() + "</HumanReadablePDF>";

            if (!settings.EmbedFontsInPdf)
            {
                deviceInfo += "  <EmbedFonts>None</EmbedFonts>";
            }

            deviceInfo += "</DeviceInfo>";

            return(deviceInfo);
        }
Example #3
0
        public void InitParameters(LocalReport localReport, object o)
        {
            PropertyInfo[]            props            = o.GetType().GetProperties();
            ReportParameterCollection reportParameters = new ReportParameterCollection();

            foreach (PropertyInfo prop in props)
            {
                var nombre = prop.Name;
                var value  = prop.GetValue(o, null);
                reportParameters.Add(new ReportParameter(nombre, "" + value));
            }
            localReport.SetParameters(reportParameters);
            localReport.SetBasePermissionsForSandboxAppDomain(new PermissionSet(PermissionState.Unrestricted));
        }
Example #4
0
        protected override ReportData Render(PageRequest request, DataTable table, string reportTemplate, string reportFormat)
        {
            HttpContext context = HttpContext.Current;
            string      q       = context.Request["q"];
            // render a report using Microsoft Report Viewer
            string mimeType          = null;
            string encoding          = null;
            string fileNameExtension = null;

            string[]  streams  = null;
            Warning[] warnings = null;
            byte[]    data     = null;
            using (LocalReport report = new LocalReport())
            {
                report.EnableHyperlinks     = true;
                report.EnableExternalImages = true;
                report.LoadReportDefinition(new StringReader(reportTemplate));
                report.DataSources.Add(new ReportDataSource(request.Controller, table));
                report.EnableExternalImages = true;
                foreach (ReportParameterInfo p in report.GetParameters())
                {
                    if (p.Name.Equals("FilterDetails") && !(String.IsNullOrEmpty(request.FilterDetails)))
                    {
                        report.SetParameters(new ReportParameter("FilterDetails", request.FilterDetails));
                    }
                    if (p.Name.Equals("BaseUrl"))
                    {
                        string baseUrl = String.Format("{0}://{1}{2}", context.Request.Url.Scheme, context.Request.Url.Authority, context.Request.ApplicationPath.TrimEnd('/'));
                        report.SetParameters(new ReportParameter("BaseUrl", baseUrl));
                    }
                    if (p.Name.Equals("Query") && !(String.IsNullOrEmpty(q)))
                    {
                        report.SetParameters(new ReportParameter("Query", HttpUtility.UrlEncode(q)));
                    }
                }
                report.SetBasePermissionsForSandboxAppDomain(new System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted));
                data = report.Render(reportFormat, null, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
            }
            return(new ReportData(data, mimeType, fileNameExtension, encoding));
        }
Example #5
0
        private void GenerateReport(IEnumerable data, String path, String ExportFormat)
        {
            try
            {
                LocalReport      report = new LocalReport();
                ReportDataSource ds     = new ReportDataSource("CaseListDataSet", data);
                report.DataSources.Add(ds);

                report.ReportPath = path;
                report.SetBasePermissionsForSandboxAppDomain(new System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted));

                Warning[] warnings;
                string[]  streamids;
                string    mimeType;
                string    encoding;
                string    filenameExtention;

                if (ExportFormat == "PDF")
                {
                    //export report to PDF
                    byte[] bytes = report.Render(
                        "PDF", null, out mimeType, out encoding, out filenameExtention, out streamids, out warnings);

                    using (FileStream fs = new FileStream("Report.pdf", FileMode.Create))
                    {
                        fs.Write(bytes, 0, bytes.Length);
                    }

                    PDFHolder pf = new PDFHolder();
                    System.Windows.Forms.Integration.WindowsFormsHost wh = new System.Windows.Forms.Integration.WindowsFormsHost();
                    wh.Child = pf;

                    Window pdfWin = new Window();
                    pdfWin.Content = wh;
                    pdfWin.Show();
                    pf.LoadPDF("Report.pdf");
                }
                else if (ExportFormat == "Export")
                {
                    SaveFileDialog saveFileDlg = new SaveFileDialog();
                    saveFileDlg.FileName   = "Report";
                    saveFileDlg.Filter     = "Excel Worksheets|*.xls";
                    saveFileDlg.DefaultExt = ".xls";

                    Nullable <bool> result = saveFileDlg.ShowDialog();

                    if (result == true)
                    {
                        //export report to excel worksheet
                        byte[] bytes = report.Render(
                            "Excel", null, out mimeType, out encoding, out filenameExtention, out streamids, out warnings);

                        using (FileStream fs = new FileStream(saveFileDlg.FileName, FileMode.Create))
                        {
                            fs.Write(bytes, 0, bytes.Length);
                        }
                    }
                }

                report.Dispose();
            }
            catch (Exception exp)
            {
                log.PrintInfoLine("GenerateReport Exception: " + exp);
            }
        }
Example #6
0
        void IHttpHandler.ProcessRequest(HttpContext context)
        {
            string      c       = context.Request["c"];
            string      q       = context.Request["q"];
            PageRequest request = this.Request;

            if ((request == null) && (String.IsNullOrEmpty(c) || String.IsNullOrEmpty(q)))
            {
                throw new Exception("Invalid report request.");
            }
            //
#pragma warning disable 0618
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            //
#pragma warning restore 0618
            // create a data table for report
            string templateName = null;
            string aa           = null;
            string reportFormat = null;
            if (request == null)
            {
                request      = serializer.Deserialize <PageRequest>(q);
                templateName = context.Request.Form["a"];
                aa           = context.Request["aa"];
            }
            else
            {
                templateName          = this.Arguments.TemplateName;
                reportFormat          = this.Arguments.Format;
                request.FilterDetails = this.Arguments.FilterDetails;
            }
            request.PageIndex        = 0;
            request.PageSize         = Int32.MaxValue;
            request.RequiresMetaData = true;
            // try to generate a report via a business rule
            ActionArgs args = null;
            if (!(String.IsNullOrEmpty(aa)))
            {
                args = serializer.Deserialize <ActionArgs>(aa);
                IDataController controller = ControllerFactory.CreateDataController();
                ActionResult    result     = controller.Execute(args.Controller, args.View, args);
                if (!(String.IsNullOrEmpty(result.NavigateUrl)))
                {
                    AppendDownloadTokenCookie();
                    context.Response.Redirect(result.NavigateUrl);
                }
                if (result.Canceled)
                {
                    AppendDownloadTokenCookie();
                    return;
                }
                result.RaiseExceptionIfErrors();
                // parse action data
                SortedDictionary <string, string> actionData = new SortedDictionary <string, string>();
                ((DataControllerBase)(controller)).Config.ParseActionData(args.Path, actionData);
                List <string> filter = new List <string>();
                foreach (string name in actionData.Keys)
                {
                    string v = actionData[name];
                    if (name.StartsWith("_"))
                    {
                        if (name == "_controller")
                        {
                            request.Controller = v;
                        }
                        if (name == "_view")
                        {
                            request.View = v;
                        }
                        if (name == "_sortExpression")
                        {
                            request.SortExpression = v;
                        }
                        if (name == "_count")
                        {
                            request.PageSize = Convert.ToInt32(v);
                        }
                        if (name == "_template")
                        {
                            templateName = v;
                        }
                    }
                    else
                    if (v == "@Arguments_SelectedValues")
                    {
                        if ((args.SelectedValues != null) && (args.SelectedValues.Length > 0))
                        {
                            StringBuilder sb = new StringBuilder();
                            foreach (string key in args.SelectedValues)
                            {
                                if (sb.Length > 0)
                                {
                                    sb.Append("$or$");
                                }
                                sb.Append(key);
                            }
                            filter.Add(String.Format("{0}:$in${1}", name, sb.ToString()));
                        }
                        else
                        {
                            return;
                        }
                    }
                    else
                    if (Regex.IsMatch(v, "^(\'|\").+(\'|\")$"))
                    {
                        filter.Add(String.Format("{0}:={1}", name, v.Substring(1, (v.Length - 2))));
                    }
                    else
                    if (args.Values != null)
                    {
                        foreach (FieldValue fv in args.Values)
                        {
                            if (fv.Name == v)
                            {
                                filter.Add(String.Format("{0}:={1}", name, fv.Value));
                            }
                        }
                    }
                    request.Filter = filter.ToArray();
                }
            }
            // load report definition
            string    reportTemplate = Controller.CreateReportInstance(null, templateName, request.Controller, request.View);
            ViewPage  page           = ControllerFactory.CreateDataController().GetPage(request.Controller, request.View, request);
            DataTable table          = page.ToDataTable();
            // insert validation key
            reportTemplate = _validationKeyRegex.Replace(reportTemplate, String.Format("/Blob.ashx?_validationKey={0}&amp;", BlobAdapter.ValidationKey));
            // figure report output format
            if (this.Arguments == null)
            {
                Match m = Regex.Match(c, "^(ReportAs|Report)(Pdf|Excel|Image|Word|)$");
                reportFormat = m.Groups[2].Value;
            }
            if (String.IsNullOrEmpty(reportFormat))
            {
                reportFormat = "Pdf";
            }
            // render a report
            string    mimeType          = null;
            string    encoding          = null;
            string    fileNameExtension = null;
            string[]  streams           = null;
            Warning[] warnings          = null;
            using (LocalReport report = new LocalReport())
            {
                report.EnableHyperlinks     = true;
                report.EnableExternalImages = true;
                report.LoadReportDefinition(new StringReader(reportTemplate));
                report.DataSources.Add(new ReportDataSource(request.Controller, table));
                report.EnableExternalImages = true;
                foreach (ReportParameterInfo p in report.GetParameters())
                {
                    if (p.Name.Equals("FilterDetails") && !(String.IsNullOrEmpty(request.FilterDetails)))
                    {
                        report.SetParameters(new ReportParameter("FilterDetails", request.FilterDetails));
                    }
                    if (p.Name.Equals("BaseUrl"))
                    {
                        string baseUrl = String.Format("{0}://{1}{2}", context.Request.Url.Scheme, context.Request.Url.Authority, context.Request.ApplicationPath.TrimEnd('/'));
                        report.SetParameters(new ReportParameter("BaseUrl", baseUrl));
                    }
                    if (p.Name.Equals("Query") && !(String.IsNullOrEmpty(q)))
                    {
                        report.SetParameters(new ReportParameter("Query", HttpUtility.UrlEncode(q)));
                    }
                }
                report.SetBasePermissionsForSandboxAppDomain(new System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted));
                byte[] reportData = report.Render(reportFormat, null, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
                if (this.Arguments != null)
                {
                    this.Arguments.MimeType          = mimeType;
                    this.Arguments.FileNameExtension = fileNameExtension;
                    this.Arguments.Encoding          = encoding;
                    this.OutputStream.Write(reportData, 0, reportData.Length);
                }
                else
                {
                    // send report data to the client
                    context.Response.Clear();
                    context.Response.ContentType = mimeType;
                    context.Response.AddHeader("Content-Length", reportData.Length.ToString());
                    AppendDownloadTokenCookie();
                    string fileName = FormatFileName(context, request, fileNameExtension);
                    if (String.IsNullOrEmpty(fileName))
                    {
                        fileName = String.Format("{0}_{1}.{2}", request.Controller, request.View, fileNameExtension);
                        if (args != null)
                        {
                            fileName = GenerateOutputFileName(args, fileName);
                        }
                    }
                    context.Response.AddHeader("Content-Disposition", String.Format("attachment;filename={0}", fileName));
                    context.Response.OutputStream.Write(reportData, 0, reportData.Length);
                }
            }
        }
        public ActionResult Inventario()
        {
            try
            {
                LocalReport rp = new LocalReport();

                rp.ReportPath = System.AppDomain.CurrentDomain.BaseDirectory + "Reportes/Inventario.rdlc";

                var adp = new RentaCarNew.Reportes.ReportTableAdapters.InventarioTableAdapter();
                var dt = new RentaCarNew.Reportes.Report.InventarioDataTable();

                adp.Fill(dt);

                ReportDataSource rdp = new ReportDataSource("dsInventario");
                rdp.Value = dt;
                rp.DataSources.Add(rdp);

                //string ReportType = "PDF";
                string mimeType;
                string encoding;
                string fileNameExtension;
                string deviceInfo = @"<DeviceInfo>"
                    + "<PageHeight>8.5in</PageHeight>"
                    + "<PageWidth>11in</PageWidth>"
                    + "<MarginTop>0in</MarginTop>" +
                    "  <MarginLeft>0.10in</MarginLeft>" +
                    "  <MarginRight>0in</MarginRight>" +
                    "  <MarginBottom>0in</MarginBottom>"
                    + "</DeviceInfo>";

                Warning[] warnings;
                string[] streams;
                byte[] renderedBytes;

                rp.SetBasePermissionsForSandboxAppDomain(new System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted));

                renderedBytes = rp.Render("pdf",
                                            deviceInfo,
                                            out mimeType,
                                            out encoding,
                                            out fileNameExtension,
                                            out streams,
                                            out warnings);

                return File(renderedBytes, mimeType);

            }
            catch (Exception ex)
            {
                Funciones.LogError(ex);
                return View();
            }
        }
        public ActionResult Cliente(FormCollection frm)
        {
            try
            {
                LocalReport rp = new LocalReport();

                string estado = frm["Estado"].ToString();

                rp.ReportPath = System.AppDomain.CurrentDomain.BaseDirectory + "Reportes/Clientes.rdlc";

                var adp = new RentaCarNew.Reportes.ReportTableAdapters.ClienteTableAdapter();
                var dt = new RentaCarNew.Reportes.Report.ClienteDataTable();

                if (string.IsNullOrEmpty(estado))
                {
                    adp.FillBy(dt);
                }
                else
                {
                    adp.FillByEstado(dt, estado);
                }

                ReportDataSource rdp = new ReportDataSource("dsCliente");
                rdp.Value = dt;
                rp.DataSources.Add(rdp);

                //string ReportType = "PDF";
                string mimeType;
                string encoding;
                string fileNameExtension;
                string deviceInfo = @"<DeviceInfo>"
                    + "<PageHeight>11in</PageHeight>"
                    + "<PageWidth>8.5in</PageWidth>"
                    + "<MarginTop>0in</MarginTop>" +
                    "  <MarginLeft>0.10in</MarginLeft>" +
                    "  <MarginRight>0in</MarginRight>" +
                    "  <MarginBottom>0in</MarginBottom>"
                    + "</DeviceInfo>";

                Warning[] warnings;
                string[] streams;
                byte[] renderedBytes;

                rp.SetBasePermissionsForSandboxAppDomain(new System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted));

                renderedBytes = rp.Render("pdf",
                                            deviceInfo,
                                            out mimeType,
                                            out encoding,
                                            out fileNameExtension,
                                            out streams,
                                            out warnings);

                return File(renderedBytes, mimeType);

            }
            catch (Exception ex)
            {
                Funciones.LogError(ex);
                return View();
            }
        }
Example #9
0
 void IHttpHandler.ProcessRequest(HttpContext context)
 {
     string c = context.Request["c"];
     string q = context.Request["q"];
     PageRequest request = this.Request;
     if ((request == null) && (String.IsNullOrEmpty(c) || String.IsNullOrEmpty(q)))
         throw new Exception("Invalid report request.");
     //
     #pragma warning disable 0618
     System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
     //
     #pragma warning restore 0618
     // create a data table for report
     string templateName = null;
     string aa = null;
     string reportFormat = null;
     if (request == null)
     {
         request = serializer.Deserialize<PageRequest>(q);
         templateName = context.Request.Form["a"];
         aa = context.Request["aa"];
     }
     else
     {
         templateName = this.Arguments.TemplateName;
         reportFormat = this.Arguments.Format;
         request.FilterDetails = this.Arguments.FilterDetails;
     }
     request.PageIndex = 0;
     request.PageSize = Int32.MaxValue;
     request.RequiresMetaData = true;
     // try to generate a report via a business rule
     ActionArgs args = null;
     if (!(String.IsNullOrEmpty(aa)))
     {
         args = serializer.Deserialize<ActionArgs>(aa);
         IDataController controller = ControllerFactory.CreateDataController();
         ActionResult result = controller.Execute(args.Controller, args.View, args);
         if (!(String.IsNullOrEmpty(result.NavigateUrl)))
         {
             AppendDownloadTokenCookie();
             context.Response.Redirect(result.NavigateUrl);
         }
         if (result.Canceled)
         {
             AppendDownloadTokenCookie();
             return;
         }
         result.RaiseExceptionIfErrors();
         // parse action data
         SortedDictionary<string, string> actionData = new SortedDictionary<string, string>();
         ((DataControllerBase)(controller)).Config.ParseActionData(args.Path, actionData);
         List<string> filter = new List<string>();
         foreach (string name in actionData.Keys)
         {
             string v = actionData[name];
             if (name.StartsWith("_"))
             {
                 if (name == "_controller")
                     request.Controller = v;
                 if (name == "_view")
                     request.View = v;
                 if (name == "_sortExpression")
                     request.SortExpression = v;
                 if (name == "_count")
                     request.PageSize = Convert.ToInt32(v);
                 if (name == "_template")
                     templateName = v;
             }
             else
                 if (v == "@Arguments_SelectedValues")
                     if ((args.SelectedValues != null) && (args.SelectedValues.Length > 0))
                     {
                         StringBuilder sb = new StringBuilder();
                         foreach (string key in args.SelectedValues)
                         {
                             if (sb.Length > 0)
                                 sb.Append("$or$");
                             sb.Append(key);
                         }
                         filter.Add(String.Format("{0}:$in${1}", name, sb.ToString()));
                     }
                     else
                         return;
                 else
                     if (Regex.IsMatch(v, "^(\'|\").+(\'|\")$"))
                         filter.Add(String.Format("{0}:={1}", name, v.Substring(1, (v.Length - 2))));
                     else
                         if (args.Values != null)
                             foreach (FieldValue fv in args.Values)
                                 if (fv.Name == v)
                                     filter.Add(String.Format("{0}:={1}", name, fv.Value));
             request.Filter = filter.ToArray();
         }
     }
     // load report definition
     string reportTemplate = Controller.CreateReportInstance(null, templateName, request.Controller, request.View);
     ViewPage page = ControllerFactory.CreateDataController().GetPage(request.Controller, request.View, request);
     DataTable table = page.ToDataTable();
     // insert validation key
     reportTemplate = _validationKeyRegex.Replace(reportTemplate, String.Format("/Blob.ashx?_validationKey={0}&amp;", BlobAdapter.ValidationKey));
     // figure report output format
     if (this.Arguments == null)
     {
         Match m = Regex.Match(c, "^(ReportAs|Report)(Pdf|Excel|Image|Word|)$");
         reportFormat = m.Groups[2].Value;
     }
     if (String.IsNullOrEmpty(reportFormat))
         reportFormat = "Pdf";
     // render a report
     string mimeType = null;
     string encoding = null;
     string fileNameExtension = null;
     string[] streams = null;
     Warning[] warnings = null;
     using (LocalReport report = new LocalReport())
     {
         report.EnableHyperlinks = true;
         report.EnableExternalImages = true;
         report.LoadReportDefinition(new StringReader(reportTemplate));
         report.DataSources.Add(new ReportDataSource(request.Controller, table));
         report.EnableExternalImages = true;
         foreach (ReportParameterInfo p in report.GetParameters())
         {
             if (p.Name.Equals("FilterDetails") && !(String.IsNullOrEmpty(request.FilterDetails)))
                 report.SetParameters(new ReportParameter("FilterDetails", request.FilterDetails));
             if (p.Name.Equals("BaseUrl"))
             {
                 string baseUrl = String.Format("{0}://{1}{2}", context.Request.Url.Scheme, context.Request.Url.Authority, context.Request.ApplicationPath.TrimEnd('/'));
                 report.SetParameters(new ReportParameter("BaseUrl", baseUrl));
             }
             if (p.Name.Equals("Query") && !(String.IsNullOrEmpty(q)))
                 report.SetParameters(new ReportParameter("Query", HttpUtility.UrlEncode(q)));
         }
         report.SetBasePermissionsForSandboxAppDomain(new System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted));
         byte[] reportData = report.Render(reportFormat, null, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
         if (this.Arguments != null)
         {
             this.Arguments.MimeType = mimeType;
             this.Arguments.FileNameExtension = fileNameExtension;
             this.Arguments.Encoding = encoding;
             this.OutputStream.Write(reportData, 0, reportData.Length);
         }
         else
         {
             // send report data to the client
             context.Response.Clear();
             context.Response.ContentType = mimeType;
             context.Response.AddHeader("Content-Length", reportData.Length.ToString());
             AppendDownloadTokenCookie();
             string fileName = FormatFileName(context, request, fileNameExtension);
             if (String.IsNullOrEmpty(fileName))
             {
                 fileName = String.Format("{0}_{1}.{2}", request.Controller, request.View, fileNameExtension);
                 if (args != null)
                     fileName = GenerateOutputFileName(args, fileName);
             }
             context.Response.AddHeader("Content-Disposition", String.Format("attachment;filename={0}", fileName));
             context.Response.OutputStream.Write(reportData, 0, reportData.Length);
         }
     }
 }