Отобразите результат файла на новой вкладке в Blazor

#blazor #webassembly

Вопрос:

В моем клиентском компоненте blazor я получаю отчет, используя это:

 lt;button @onclick="GetReport"gt; GETlt;/buttongt;   protected async Task GetReport()  {  var dateFrom = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);  var dateTo = dateFrom.AddDays(1);  var parameter = new FetchEmployeeAttendance  {  DateFrom = dateFrom,  DateTo = dateTo,  ReportType = 1,  UserId = 2  };  var result = await DailyTimeInService.GetDailyAttendances(parameter);  Console.WriteLine(result);  }  

В сервисе я так называю сервер:

 public async Tasklt;System.Net.Http.HttpContentgt; GetDailyAttendances(FetchEmployeeAttendance parameter)  {  var result = await httpService.Post($@"api/Reports", parameter);  return result;  }   public async Tasklt;HttpContentgt; Post(string uri, object value)  {  var request = new HttpRequestMessage(HttpMethod.Post, uri);  var x = JsonSerializer.Serialize(value);  request.Content = new StringContent(JsonSerializer.Serialize(value), Encoding.UTF8, "application/json");  var result = await SendRequest(request);  return result;  }   private async Tasklt;HttpContentgt; SendRequest(HttpRequestMessage request)  {  var user = await localStorageService.GetItemlt;stringgt;("access_token");  var isApiUrl = !request.RequestUri.IsAbsoluteUri;  if (user != null amp;amp; isApiUrl)  request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", user);   using var response = await httpClient.SendAsync(request);  var content = await response.Content.ReadAsByteArrayAsync();  response.Content = new ByteArrayContent(content);   if (response.StatusCode == HttpStatusCode.Unauthorized)  {  navigationManager.NavigateTo("login");  }   if (response.StatusCode == HttpStatusCode.BadRequest)  {  var reply = await response.Content.ReadAsStringAsync();  var oReply = JsonSerializer.Deserializelt;ErrorReplygt;(reply);  await helperService.InvokeAlert("Sorry...", $@"{oReply.Error[0].ToString()}", true);  }  return response.Content;  }  In the server, this is the controller that I call:   [HttpPost]  public async Tasklt;ActionResultgt; GetReportByAdmin(FetchEmployeeAttendance parameter)  {  try  {  var result = await repo.GetDailyAttendances(parameter);  string mimeType = "";  int extension = 1;  var path = $@"{webHostEnvironment.WebRootPath}\Reports\Report.rdlc";   Dictionarylt;string, stringgt; param = new Dictionarylt;string, stringgt;();  param.Add("param", "Sample Report");  var localReport = new LocalReport(path);  localReport.AddDataSource("dsAttendance", result);  if(parameter.ReportType == 1)  {  var res = localReport.Execute(RenderType.Pdf, extension, param, mimeType);  return File(res.MainStream, "application/pdf");  } else  {  var res = localReport.Execute(RenderType.Excel, extension, param, mimeType);  return File(res.MainStream, "application/msexcel");  }  }  catch (Exception ex)  {  return apiResult.Send400(ex.Message);  }  }  

Ответ с сервера может быть в формате pdf или excel. Как мне отобразить файл(pdf или excel) на новой вкладке, поскольку я не использую атрибут «href» в компоненте, потому что мне нужно включить некоторые параметры при вызове сервера?

Комментарии:

1. Разбор PDF-файла чрезвычайно сложно выполнить в Интернете. Я бы рекомендовал использовать библиотеку pdf C# для визуализации в формате .jpg, а затем представить их в качестве источников для тега lt;imggt;. Excel немного проще в зависимости от того, что именно вам нужно. ЕСЛИ вам просто нужны табличные данные, это довольно просто. Если вам нужен точный внешний ВИД, то это будет очень сложно. Даже настольные и онлайн-версии, предоставляемые Microsoft, не соответствуют надежному форматированию, поэтому я бы предположил (без обид), что вам будет еще сложнее.

2. Другой вариант-найти конвертер SVG или сохранить его, так как SVG гораздо более совместим с веб-интерфейсом.

3. @Bennyboy1973 Спасибо. Что я только что сделал, так это извлек список из API, а затем в своем Blazor WASM я просто преобразовал его в pdf и excel. Таким образом, клиентская сторона отображает его в формате pdf и excel. Это стало НАМНОГО, намного проще.

4. Ну, проблема в том, что не все клиентские стороны гарантированно способны отображать документы pdf или excel. Но если у вас есть результаты, которыми вы довольны, я рад это слышать!