javascript php jquery laravel dompdf

javascript - dompdf laravel



Mostrar pdf desde arraybuffer (3)

De mis pruebas, la respuesta es en respuesta, no en respuesta.datos, por lo que lo siguiente debería funcionar:

$.ajax({ type:"GET", url: "/display", responseType: ''arraybuffer'' }).done(function( response ) { var blob = new Blob([response], {type: ''application/pdf''}); var pdfurl = window.URL.createObjectURL(blob)+"#view=FitW"; $("#pdfviewer").attr("data",pdfurl); });

Aunque parece que JQuery está haciendo algo con la respuesta causando una salida de PDF en blanco ... ( PDF está en blanco al descargar usando JavaScript ). Esto funcionará:

var xhr = new XMLHttpRequest(); xhr.open(''GET'', ''test.pdf'', true); xhr.responseType = ''arraybuffer''; xhr.onload = function(e) { if (this.status == 200) { var blob=new Blob([this.response], {type:"application/pdf"}); var pdfurl = window.URL.createObjectURL(blob)+"#view=FitW"; $("#pdfviewer").attr("data",pdfurl); } }; xhr.send();

Estoy devolviendo datos de flujo de laravel dompdf de este código

$pdf = /App::make(''dompdf.wrapper''); $pdf->loadHTML("<div>This is test</div>"); return $pdf->stream();

Y este es mi código JS ajax

$.ajax({ type:"GET", url: "/display", responseType: ''arraybuffer'' }).done(function( response ) { var blob = new Blob([response.data], {type: ''application/pdf''}); var pdfurl = window.URL.createObjectURL(blob)+"#view=FitW"; $("#pdfviewer").attr("data",pdfurl); });

Aquí hay HTML para mostrar pdf después de ajax

<object id="pdfviewer" data="/files/sample.pdf" type="application/pdf" style="width:100%;height:500px;"></object>

Me estoy poniendo debajo del error

Error al cargar el documento PDF

Por favor, ayuda a arreglar esto. Cómo mostrar el archivo pdf.


Me gusta guest271314 respuesta de guest271314 , especialmente la segunda versión que usa fetch, pero quería agregar una solución que no use un polyfill o una tecnología experimental como fetch .

Esta solución utiliza la API XMLHttpRequest nativa para crear la solicitud. Esto nos permite cambiar el responseType a arrayBuffer .

var xhr = new XMLHttpRequest(); var pdfsrc = "https://upload.wikimedia.org/wikipedia/en/6/62/Definition_of_management.pdf"; xhr.open(''GET'', pdfsrc, true); xhr.responseType = "arraybuffer"; xhr.addEventListener("load", function (evt) { var data = evt.target.response; if (this.status === 200) { $("#pdfviewer").attr("src", URL.createObjectURL(new Blob([data], { type: "application/pdf" }))); } }, false); xhr.send();

Bifurqué guest271314s plnkr para mostrar este método en acción: http://plnkr.co/edit/7tfBYQQdnih9cW98HSXX?p=preview


jQuery.ajax() no tiene una configuración de tipo de responseType por defecto. Puede usar un polyfill, por ejemplo jquery-ajax-blob-arraybuffer.js que implementa el transporte de datos binarios, o utilizar fetch() .

Tenga en cuenta también que el cromo y el cromo tienen problemas para mostrar .pdf en los elementos <object> y <embed> , consulte Visualización de PDF con etiqueta de incrustación de objeto con URL de blob , Incruste un blob con PDFObject . Sustituya usando el elemento <iframe> por el elemento <object> .

$(function() { var pdfsrc = "/display"; var jQueryAjaxBlobArrayBuffer = "https://gist.githubusercontent.com/SaneMethod/" + "7548768/raw/ae22b1fa2e6f56ae6c87ad0d7fbae8fd511e781f/" + "jquery-ajax-blob-arraybuffer.js"; var script = $("<script>"); $.get(jQueryAjaxBlobArrayBuffer) .then(function(data) { script.text(data).appendTo("body") }, function(err) { console.log(err); }) .then(function() { $.ajax({ url: pdfsrc, dataType: "arraybuffer" }) .then(function(data) { // do stuff with `data` console.log(data, data instanceof ArrayBuffer); $("#pdfviewer").attr("src", URL.createObjectURL(new Blob([data], { type: "application/pdf" }))) }, function(err) { console.log(err); }); }); });

Usando fetch() , .arrayBuffer()

var pdfsrc = "/display"; fetch(pdfsrc) .then(function(response) { return response.arrayBuffer() }) .then(function(data) { // do stuff with `data` console.log(data, data instanceof ArrayBuffer); $("#pdfviewer").attr("src", URL.createObjectURL(new Blob([data], { type: "application/pdf" }))) }, function(err) { console.log(err); });

plnkr http://plnkr.co/edit/9R5WcsMSWQaTbgNdY3RJ?p=preview

versión 1 jquery-ajax-blob-arraybuffer.js , jQuery.ajax() ; versión 2 fetch() , .arrayBuffer()