public Task <Render2Response> Render2Async(string executionId, Render2Request request)
 {
     using (var context = this.SetMessageHeaders(executionId))
     {
         return(this.Render2Async(request));
     }
 }
Ejemplo n.º 2
0
        /// <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);
            }
        }