public Task <Render2Response> Render2Async(string executionId, Render2Request request) { using (var context = this.SetMessageHeaders(executionId)) { return(this.Render2Async(request)); } }
/// <summary> /// step 3. /// </summary> /// <param name="result"></param> protected void Render(ReportRequest rRequest, ref ReportExecuteResult result, string findString = null) { try { var deviceInfo = GenerateDeviceInfo(rRequest); string format; Versions.TryGetValue(this.ReportSettings.ReportServer, out Version version); switch (rRequest.RenderType) { case ReportRenderType.Html4_0: format = "Html4.0"; break; case ReportRenderType.ExcelOpenXml: if (version.Major < SuportExportVersion) { format = ReportRenderType.Excel.ToString(); } else { format = ReportRenderType.ExcelOpenXml.ToString(); } break; case ReportRenderType.WordOpenXml: if (version.Major < SuportExportVersion) { format = ReportRenderType.Word.ToString(); } else { format = ReportRenderType.WordOpenXml.ToString(); } break; default: format = rRequest.RenderType.ToString(); break; } var strDeviceInfo = deviceInfo.ToString(); //strDeviceInfo = @"<DeviceInfo><HTMLFragment>true</HTMLFragment><Section>0</Section></DeviceInfo>"; var request = new Render2Request(format, strDeviceInfo, ReportExecutionService.PageCountMode.Actual); var response = ReportClient.Render2Async(request).GetAwaiter().GetResult(); if (rRequest.RenderType == ReportRenderType.Html4_0 || rRequest.RenderType == ReportRenderType.Html5) { StringBuilder sb = new StringBuilder(Encoding.UTF8.GetString(response.Result)); Regex reg = new Regex("(<img [^>]*? src=\"([^\"]+&rs%3AImageID=([^\"']+))\")", RegexOptions.IgnoreCase); var matchs = reg.Match(sb.ToString()); while (matchs.Success) { var a = matchs.Result("$1"); var b = matchs.Result("$2"); var c = matchs.Result("$3"); var cc = ReportClient.RenderStreamAsync(new RenderStreamRequest(format, c, strDeviceInfo)).GetAwaiter().GetResult(); var img = $"data:{cc.MimeType};base64,{Convert.ToBase64String(cc.Result)}"; var aa = a.Replace(b, img); sb.Replace(a, aa); matchs = matchs.NextMatch(); } result.Contents = sb.ToString(); } result.Stream = response.Result; result.Encoding = response.Encoding; result.Extension = response.Extension; result.MimeType = response.MimeType; } catch (Exception ex) { throw new ReportException("Render error: " + ex.Message, ex); } }