ExportComponent.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Components;
  6. using Microsoft.AspNetCore.Components.Rendering;
  7. using FastReport.Web.Blazor.Export;
  8. #if !WASM
  9. using FastReport.Web.Infrastructure;
  10. #endif
  11. namespace FastReport.Web.Blazor.Components
  12. {
  13. public partial class ExportComponent : Microsoft.AspNetCore.Components.ComponentBase
  14. {
  15. [Parameter]
  16. public WebReport WebReport { get; set; }
  17. /// Main function
  18. protected override void BuildRenderTree(RenderTreeBuilder builder)
  19. {
  20. //Utils.Config.EnableScriptSecurity = false;
  21. if(WebReport.Report.IsPrepared)
  22. {
  23. int pageWidth = (int)Math.Ceiling(WebReport.GetReportPageWidthInPixels() * WebReport.Zoom);
  24. //int pageHeight = (int)Math.Ceiling(WebReport.GetReportPageHeightInPixels() * WebReport.Zoom);
  25. WebReport.ReportMaxWidth = pageWidth;
  26. using (BlazorExport blazor = new BlazorExport())
  27. {
  28. WebReport.PictureCache.Clear();
  29. blazor.StylePrefix = $"fr{WebReport.ID}";
  30. blazor.Pictures = WebReport.Pictures;
  31. blazor.EmbedPictures = WebReport.EmbedPictures;
  32. blazor.OnClick += ProcessClick;
  33. blazor.EnableMargins = WebReport.EnableMargins;
  34. blazor.Zoom = WebReport.Zoom;
  35. blazor.PageNumbers = WebReport.SinglePage ? "" : (WebReport.CurrentPageIndex + 1).ToString();
  36. #if !WASM
  37. var routeOptions = FastReportGlobal.FastReportOptions;
  38. blazor.WebImagePrefix = WebUtils.ToUrl(routeOptions.RoutePathBaseRoot,
  39. routeOptions.RouteBasePath,
  40. $"preview.getPicture?reportId={WebReport.ID}&pictureId=");
  41. #endif
  42. blazor.SinglePage = WebReport.SinglePage;
  43. blazor.CurPage = WebReport.CurrentPageIndex;
  44. blazor.Export(WebReport.Report, builder);
  45. if (!blazor.EmbedPictures)
  46. WebReport.CacheHtmlPictures(blazor, blazor.CurPage);
  47. }
  48. }
  49. }
  50. private void ProcessClick(object sender, OnClickEventArgs args)
  51. {
  52. bool update = WebReport.ProcessClick(sender, args);
  53. // call Re-render
  54. if(update)
  55. WebReport.OnUpdate();
  56. }
  57. }
  58. }