Рендеринг .rdlc отчетов с ASP .NET Core - PullRequest
0 голосов
/ 28 февраля 2019

Можно ли визуализировать .rdlc отчеты с помощью ASP.NET Core?В настоящее время это возможно только в том случае, если я нацеливаюсь на .NET Framework, а не на .NET Core.

Мне не нужен просмотрщик отчетов, мне просто нужно отобразить результаты отчета .rdlc какбайтовый массив.

Ответы [ 3 ]

0 голосов
/ 01 июля 2019

Вы очень хорошо можете рендерить rdlc в байтовый массив.Пожалуйста, смотрите связанный вопрос, который я задал некоторое время назад. Локальный просмотрщик отчетов RDLC для ASP.NET Core и Angular (> 2.0) .

В конечном итоге творческое обсуждение этого потока привело к угловому пакету (https://www.npmjs.com/package/ng2-pdfjs-viewer - раскрытие информации;Я - автор) с функциональностью расходного массива байтов rdlc на стороне клиента.Конечно, вместо этого пакета вы можете выбрать другую библиотеку javascript для отображения массива байтов.

Простое использование angular будет таким:Обратите внимание, что большую часть кода можно использовать повторно, даже если вы используете обычный js или другой фреймворк.

Приведенный ниже код демонстрирует

1. Битирование массива байтов с использованием RDLCуправление средством просмотра отчетов по методу действия ядра aspnet (на стороне сервера) и отправка его по сети через http.(Код на C #)
2. Обработка байтового массива ответа в объект BLOB-объекта (Js)
3 .Подача объекта BLOB-объекта в ng2-pdfjs-viewer.
4 .ng2-pdfjs-viewer внутренне использует PDFJS от Mozilla для выполнения функции отображения PDF в браузере.
(FYI .. Я взял код из примеров, предоставленных в пакете ng2-pdfjs-viewer. Замените шаги 3 и 4, если вы используетедругая библиотека или простой javascript)

<!-- your.component.html -->
<button (click)="showPdf();">Show</button>
<div style="width: 800px; height: 400px">
  <ng2-pdfjs-viewer #pdfViewer></ng2-pdfjs-viewer>
</div>

export class MyComponent implements OnInit {
  @ViewChild('pdfViewer') pdfViewer
  ...

  private downloadFile(url: string): any {
    return this.http.get(url, { responseType: ResponseContentType.Blob }).map(
      (res) => {
        return new Blob([res.blob()], { type: "application/pdf" });
      });
  }

  public showPdf() {
    let url = "http://localhost/api/GetMyPdf";
    this.downloadFile(url).subscribe(
    (res) => {
        this.pdfViewer.pdfSrc = res; // <---- pdfSrc can be Blob or Uint8Array
        this.pdfViewer.refresh(); // Ask pdf viewer to load/reresh pdf
      }
    );
  }

[HttpGet]
[Route("MyReport")]
public IActionResult GetReport()
{
   var reportViewer = new ReportViewer {ProcessingMode = ProcessingMode.Local};
   reportViewer.LocalReport.ReportPath = "Reports/MyReport.rdlc";

   reportViewer.LocalReport.DataSources.Add(new ReportDataSource("NameOfDataSource1", reportObjectList1));
   reportViewer.LocalReport.DataSources.Add(new ReportDataSource("NameOfDataSource2", reportObjectList1));

   Warning[] warnings;
   string[] streamids;
   string mimeType;
   string encoding;
   string extension;

   var bytes = reportViewer.LocalReport.Render("application/pdf", null, out mimeType, out encoding, out extension, out streamids, out warnings);

   return File(bytes, "application/pdf")
}
0 голосов
/ 10 августа 2019

Единственный способ визуализации отчетов RDLC клиента с ядром .NET (без полной .NET Framework) - это использование платного решения Syncfusion.Я проверил версию трассы, и она работает хорошо.Кроме того, можно отображать RDL-отчеты, размещенные на сервере, с помощью ASP .NET Core (без каких-либо сторонних инструментов), однако это не идеально, поскольку мне пришлось бы перенести многие отчеты RDLC в RDL - Muaddib878 2 минуты назад. Edit

0 голосов
/ 01 марта 2019

Нельзя отображать отчеты .rdlc в .NET Core, используя .rdlc в качестве байтового массива.

...