WebReportHtml.Blazor.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using FastReport.Export.Html;
  2. using FastReport.Preview;
  3. using FastReport.Table;
  4. using System;
  5. using System.IO;
  6. using System.Net;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using FastReport.Web.Blazor.Export;
  10. namespace FastReport.Web
  11. {
  12. public partial class WebReport
  13. {
  14. #region Internal Methods
  15. internal bool ProcessClick(object sender, OnClickEventArgs args)
  16. {
  17. bool needUpdate = true;
  18. var clickType = args.Type;
  19. if(args.Report != null)
  20. {
  21. args.Object.SetReport(args.Report);
  22. }
  23. switch (clickType)
  24. {
  25. case ClickType.Click:
  26. Report.FindClickedObject(args.Object, args.PageNumber, Click);
  27. break;
  28. case ClickType.CheckboxClick:
  29. Report.FindEditableObject<CheckBoxObject>(args.Object, args.PageNumber, CheckboxClick);
  30. break;
  31. case ClickType.TextEdit:
  32. needUpdate = false;
  33. if(args.Object is TextObject textObject)
  34. {
  35. string text = textObject.Text;
  36. Report.FindEditableObject<TextObject>(textObject, args.PageNumber,
  37. (obj, reportPage, _pageN) =>
  38. {
  39. obj.Text = text;
  40. Refresh(_pageN, reportPage);
  41. });
  42. }
  43. break;
  44. case ClickType.DetailedReport:
  45. DoDetailedReport(args.Object, string.Empty);
  46. break;
  47. case ClickType.DetailedPage:
  48. DoDetailedPage(args.Object);
  49. break;
  50. case ClickType.Bookmark:
  51. Bookmark(args.Object);
  52. break;
  53. case ClickType.PageNumber:
  54. string value = args.Object.Hyperlink.Value;
  55. if(!string.IsNullOrWhiteSpace(value))
  56. GoToPageNumber(value);
  57. break;
  58. case ClickType.AdvancedMatrixClick:
  59. if (args.Object is AdvMatrix.MatrixButton advMatrix)
  60. {
  61. DoClickAdvancedMatrixByParamID(advMatrix.Name, args.PageNumber, advMatrix.Index);
  62. }
  63. break;
  64. }
  65. return needUpdate;
  66. }
  67. #endregion
  68. #region Private Methods
  69. private void Bookmark(ReportComponentBase obj)
  70. {
  71. int i = PageNByBookmark(obj.Hyperlink.Value);
  72. if (i != -1)
  73. GotoPage(i);
  74. }
  75. private void DoDetailedPage(ReportComponentBase obj)
  76. {
  77. Report currentReport = CurrentTab.NeedParent ? Tabs[0].Report : Report;
  78. if (obj != null)
  79. {
  80. ReportPage? reportPage = currentReport.FindObject(obj.Hyperlink.DetailPageName) as ReportPage;
  81. if (reportPage != null)
  82. {
  83. string paramName = obj.Hyperlink.ReportParameter;
  84. string paramValue = obj.Hyperlink.Value;
  85. Data.Parameter param = currentReport.Parameters.FindByName(paramName);
  86. if (param != null && param.ChildObjects.Count > 0)
  87. {
  88. string[] paramValues = paramValue.Split(obj.Hyperlink.ValuesSeparator[0]);
  89. if (paramValues.Length > 0)
  90. {
  91. int i = 0;
  92. foreach (Data.Parameter childParam in param.ChildObjects)
  93. {
  94. childParam.Value = paramValues[i++];
  95. if (i >= paramValues.Length)
  96. break;
  97. }
  98. }
  99. }
  100. else
  101. currentReport.SetParameterValue(paramName, paramValue);
  102. PreparedPages oldPreparedPages = currentReport.PreparedPages;
  103. PreparedPages pages = new PreparedPages(currentReport);
  104. currentReport.SetPreparedPages(pages);
  105. currentReport.PreparePage(reportPage, true);
  106. Report tabReport = new Report();
  107. tabReport.SetPreparedPages(currentReport.PreparedPages);
  108. Tabs.Add(new ReportTab()
  109. {
  110. Name = paramValue,
  111. Report = tabReport,
  112. Closeable = true,
  113. NeedParent = true
  114. });
  115. currentReport.SetPreparedPages(oldPreparedPages);
  116. CurrentTabIndex = Tabs.Count - 1;
  117. }
  118. }
  119. }
  120. internal void CacheHtmlPictures(BlazorExport export, int pageN)
  121. {
  122. //WebReportCache cache = new WebReportCache(this.Context);
  123. for (int i = 0; export.PreparedPages.Count > pageN && i < export.PreparedPages[pageN].Pictures.Count; i++)
  124. {
  125. try
  126. {
  127. Stream picStream = export.PreparedPages[pageN].Pictures[i];
  128. byte[] image = new byte[picStream.Length];
  129. picStream.Position = 0;
  130. int n = picStream.Read(image, 0, (int)picStream.Length);
  131. string guid = export.PreparedPages[pageN].Guids[i];
  132. //cache.PutObject(guid, image);
  133. PictureCache[guid] = image;
  134. }
  135. catch
  136. {
  137. //Log.AppendFormat("Error with picture: {0}\n", i.ToString());
  138. }
  139. }
  140. }
  141. #endregion
  142. }
  143. }