Saltar al contenido

Representación de informes .rdlc con ASP .NET Core

Posteriormente a indagar en diferentes repositorios y sitios webs finalmente dimos con la solución que te mostramos ahora.

Solución:

Si desea crear pdf/excel/word usando el informe rdlc, le recomiendo que use la biblioteca AspNetCore.Reporting. Esto es de código abierto y viene como un paquete nuget. puede integrar esto en su función .NET Core API o .NET Core Azure. Puedes generar un byte array convertirlo a base 64 string y recuperar eso a su lado del cliente. Más en el enlace en el comentario.

Muy bien puedes convertir rdlc en un byte array. Consulte una pregunta relacionada que hice hace un tiempo. Visor de informes locales RDLC para ASP.NET Core y Angular (> 2.0).

Finalmente, una discusión creativa sobre ese hilo resultó en un paquete angular (https://www.npmjs.com/package/ng2-pdfjs-viewer – Divulgación; soy el autor) con un byte rdlc consumible array funcionalidad en el lado del cliente. Por supuesto, en lugar de este paquete, puede elegir otra biblioteca de JavaScript para mostrar el byte array.

Un uso simple en angular sería así. Tenga en cuenta que la mayor parte del código se puede reutilizar incluso si está utilizando js simple u otro marco.

El siguiente código demuestra

1. byte de escupir array usando el control del visor de informes RDLC en el método de acción central de aspnet (en el lado del servidor) y enviándolo por cable usando http. (El código está en C#)
2. Procesando byte de respuesta array en un objeto blob (Js)
3. Introducir objeto blob en ng2-pdfjs-viewer.
4. ng2-pdfjs-viewer utiliza internamente PDFJS de Mozilla para lograr la hazaña de mostrar el PDF en el navegador.
(Para su información… Tomé el código de las muestras proporcionadas en el paquete ng2-pdfjs-viewer. Reemplace los pasos 3 y 4 si está usando otra biblioteca o javascript simple)



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")

Si aceptas, tienes la opción de dejar un ensayo acerca de qué te ha gustado de esta noticia.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *