ctr*_* f5 23 javascript php jquery dompdf laravel
我从此代码返回laravel dompdf的流数据
$pdf = \App::make('dompdf.wrapper');
$pdf->loadHTML("<div>This is test</div>");
return $pdf->stream();
Run Code Online (Sandbox Code Playgroud)
这是我的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);
});
Run Code Online (Sandbox Code Playgroud)
这是在ajax之后显示pdf的HTML
<object id="pdfviewer" data="/files/sample.pdf" type="application/pdf" style="width:100%;height:500px;"></object>
Run Code Online (Sandbox Code Playgroud)
我收到了以下错误
无法加载PDF文档
请帮忙解决这个问题.如何显示pdf文件.
gue*_*314 14
jQuery.ajax()
responseType
默认情况下没有设置.您可以使用polyfill,例如jquery-ajax-blob-arraybuffer.js,它实现二进制数据传输或使用fetch()
.
另请注意,chrome,chromium .pdf
在任一元素<object>
和<embed>
元素上都有问题,请参阅使用带有blob URL的object embed标记显示PDF,使用PDFObject嵌入Blob.使用<iframe>
元素替换<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);
});
});
});
Run Code Online (Sandbox Code Playgroud)
使用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);
});
Run Code Online (Sandbox Code Playgroud)
plnkr http://plnkr.co/edit/9R5WcsMSWQaTbgNdY3RJ?p=preview
版本1 jquery-ajax-blob-arraybuffer.js
,jQuery.ajax()
; 版本2 fetch()
,.arrayBuffer()
小智 5
我非常喜欢guest271314的答案,尤其是使用fetch的第二个版本,但我想添加一个不使用polyfill或实验技术(如fetch
.
此解决方案使用本机XMLHttpRequest API来创建请求。这允许我们将 更改responseType
为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();
Run Code Online (Sandbox Code Playgroud)
我分叉了guest271314s plnkr来展示这个方法:http ://plnkr.co/edit/7tfBYQQdnih9cW98HSXX?p=preview