Вы очень хорошо можете рендерить 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")
}