private async Task <bool> RequestFastReportController(HttpContext httpContext) { if (!httpContext.Request.Path.StartsWithSegments(WebUtils.ToUrl(FastReportGlobal.FastReportOptions.RouteBasePath))) { return(false); } if (!(FastReportGlobal.FastReportOptions.Authorize?.Invoke(httpContext.Request) ?? true)) { await new UnauthorizedResult().ExecuteResultAsync(new ActionContext(httpContext, new RouteData(), new ActionDescriptor())); return(true); } // create new controllers on each request var controllers = new BaseController[] { new ResourceController(), new ReportController(), new DesignerController(), }; foreach (var controller in controllers) { if (await controller.OnRequest(httpContext)) { return(true); } } return(false); }
internal IActionResult PrintHtml(BaseController controller) { PictureCache.Clear(); using (var htmlExport = new HTMLExport()) { htmlExport.OpenAfterExport = false; htmlExport.Navigator = false; htmlExport.Layers = Layers; htmlExport.SinglePage = true; htmlExport.Pictures = Pictures; htmlExport.Print = true; htmlExport.Preview = true; htmlExport.SubFolder = false; htmlExport.EmbedPictures = EmbedPictures; //htmlExport.WebImagePrefix = WebUtils.ToUrl(FastReportGlobal.FastReportOptions.RouteBasePath, controller.RouteBasePath, ID, "picture") + "/"; htmlExport.WebImagePrefix = WebUtils.ToUrl(FastReportGlobal.FastReportOptions.RouteBasePath, $"preview.getPicture?reportId={ID}&pictureId="); htmlExport.ExportMode = HTMLExport.ExportType.WebPrint; byte[] file = null; using (MemoryStream ms = new MemoryStream()) { htmlExport.Export(Report, ms); file = ms.ToArray(); } if (htmlExport.PrintPageData != null) { //WebReportCache cache = new WebReportCache(this.Context); // add all pictures in cache for (int i = 0; i < htmlExport.PrintPageData.Pictures.Count; i++) { Stream stream = htmlExport.PrintPageData.Pictures[i]; byte[] image = new byte[stream.Length]; stream.Position = 0; int n = stream.Read(image, 0, (int)stream.Length); string picGuid = htmlExport.PrintPageData.Guids[i]; //cache.PutObject(picGuid, image); PictureCache[picGuid] = image; } // cleanup for (int i = 0; i < htmlExport.PrintPageData.Pictures.Count; i++) { Stream stream = htmlExport.PrintPageData.Pictures[i]; stream.Dispose(); stream = null; } htmlExport.PrintPageData.Pictures.Clear(); htmlExport.PrintPageData.Guids.Clear(); } return(new FileContentResult(file, "text/html")); } }
private string GetPictureBoxURL(Image image) { int hash = image.GetHashCode(); MemoryStream picStream = new MemoryStream(); image.Save(picStream, image.RawFormat); byte[] imageArray = new byte[picStream.Length]; picStream.Position = 0; picStream.Read(imageArray, 0, (int)picStream.Length); WebReport.PictureCache.Add(hash.ToString(), imageArray); string url = WebUtils.ToUrl(FastReportGlobal.FastReportOptions.RouteBasePath, $"preview.getPicture?"); return($" background: url('{url}reportId={WebReport.ID}&pictureId={hash}') no-repeat !important;-webkit-print-color-adjust:exact;"); }
internal StringBuilder ReportInHtml() { PictureCache.Clear(); var sb = new StringBuilder(); using (HTMLExport html = new HTMLExport()) { html.ExportMode = HTMLExport.ExportType.WebPreview; //html.CustomDraw += this.CustomDraw; html.StylePrefix = $"fr{ID}"; //html.StylePrefix = Prop.ControlID.Substring(0, 6); html.Init_WebMode(); html.Pictures = Pictures; //html.Pictures = Prop.Pictures; html.EmbedPictures = EmbedPictures; //html.EmbedPictures = EmbedPictures; html.OnClickTemplate = "fr{0}.click(this,'{1}','{2}')"; html.ReportID = ID; //html.ReportID = Prop.ControlID; html.EnableMargins = EnableMargins; //html.EnableMargins = Prop.EnableMargins; // calc zoom //CalcHtmlZoom(html); html.Zoom = Zoom; html.Layers = Layers; //html.Layers = Layers; html.PageNumbers = SinglePage ? "" : (CurrentPageIndex + 1).ToString(); //html.PageNumbers = SinglePage ? "" : (Prop.CurrentPage + 1).ToString(); //if (Prop.AutoWidth) // html.WidthUnits = HtmlSizeUnits.Percent; //if (Prop.AutoHeight) // html.HeightUnits = HtmlSizeUnits.Percent; //html.WebImagePrefix = WebUtils.ToUrl(FastReportGlobal.FastReportOptions.RouteBasePath, controller.RouteBasePath, ID, "picture") + "/"; //html.WebImagePrefix = String.Concat(context.Response.ApplyAppPathModifier(WebUtils.HandlerFileName), "?", WebUtils.PicsPrefix); html.WebImagePrefix = WebUtils.ToUrl(FastReportGlobal.FastReportOptions.RouteBasePath, $"preview.getPicture?reportId={ID}&pictureId="); html.SinglePage = SinglePage; //html.SinglePage = SinglePage; html.CurPage = CurrentPageIndex; //html.CurPage = CurrentPage; html.Export(Report, (Stream)null); //sb.Append("<div class=\"frbody\" style =\""); //if (HtmlLayers) // sb.Append("position:relative;z-index:0;"); //sb.Append("\">"); // container for html report body //int pageWidth = (int)Math.Ceiling(GetReportPageWidthInPixels() * html.Zoom); //int pageHeight = (int)Math.Ceiling(GetReportPageHeightInPixels() * html.Zoom); //int paddingLeft = (int)Math.Ceiling(Padding.Left * html.Zoom); //int paddingRight = (int)Math.Ceiling(Padding.Right * html.Zoom); //int paddingTop = (int)Math.Ceiling(Padding.Top * html.Zoom); //int paddingBottom = (int)Math.Ceiling(Padding.Bottom * html.Zoom); //sb.Append("<div class=\"frcontainer\" style=\"width:" + pageWidth + // "px;height:" + (SinglePage ? pageHeight * html.Count : pageHeight) + // "px;padding-left:" + paddingLeft + // "px;padding-right:" + paddingRight + // "px;padding-top:" + paddingTop + // "px;padding-bottom:" + paddingBottom + "px\">"); if (html.Count > 0) { if (SinglePage) { DoAllHtmlPages(sb, html); CurrentPageIndex = 0; //Prop.CurrentPage = 0; } else { DoHtmlPage(sb, html, 0); } } //sb.Append("</div>"); //sb.Append("</div>"); // important container, it cuts off elements that are outside of the report page bounds int pageWidth = (int)Math.Ceiling(GetReportPageWidthInPixels() * html.Zoom); int pageHeight = (int)Math.Ceiling(GetReportPageHeightInPixels() * html.Zoom); sb.Insert(0, $@"<div style=""width:{pageWidth}px;height:{(SinglePage ? pageHeight * html.Count : pageHeight)}px;overflow:hidden;display:inline-block;"">"); sb.Append("</div>"); } return(sb); }