He estado probando el siguiente código del lado del cliente para representar la matriz de bytes PDF devuelta desde el lado del servidor. Muestra el número correcto de miniaturas/páginas en el navegador, pero el contenido no se muestra. Tanto las miniaturas como las páginas son completamente negras. ¿Hay algo que me estoy perdiendo aquí? Además, leí que createObjectURL está en desuso. ¿Hay alguna manera mejor de lograr esto?
¡Gracias!
Código del lado del servidor:
byte[] bytes = service.GetDocument(ID); result.StatusCode = HttpStatusCode.OK; result.Content = new ByteArrayContent(bytes, 0, bytes.Length); result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("inline");Código del lado del cliente:
@model DocumentWeb.ViewModels.Document <html> <body> <object data="" type="application/pdf" width="100%" height="100%"> </object> <script> $(document).ready(function (e) { $("object").attr("width", screen.availWidth); $("object").attr("height", screen.availHeight); var url = "@Url.Content("~/pdf/document")"; var data = { ID: "@Model.DocID", }; var result = $.post({ url: url, type: 'POST', data: data }); result.done(function (bytearray) { var blob = new Blob([bytearray], { type: 'application/pdf' }); var link= window.URL.createObjectURL(blob); $("object").attr("data", link); }); result.fail(function (xhr) { console.log(xhr.responseText); }); }); </script> </body> </html>Siempre puede codificar en base64 su matriz de bytes. Las etiquetas HTML <object> admiten imágenes codificadas en base64. Algo así como <object src="data:application/pdf;base64, ABC123... /> donde ABC123... es su PDF binario codificado en base64.