私はこのコードからlaravel dompdfからストリームデータを返しています
$pdf = \App::make('dompdf.wrapper');
$pdf->loadHTML("<div>This is test</div>");
return $pdf->stream();
そして、これは私の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);
});
ここにajaxの後にpdfを表示するHTMLがあります
<object id="pdfviewer" data="/files/sample.pdf" type="application/pdf" style="width:100%;height:500px;"></object>
エラーが発生しています
ロードに失敗しましたPDF document
これを修正するのを手伝ってください。 PDFファイルの表示方法。
jQuery.ajax()
には、デフォルトでresponseType
設定がありません。ポリフィルを使用できます。たとえば、バイナリデータ転送を実装する jquery-ajax-blob-arraybuffer.js またはfetch()
を使用できます。
また、クロム、クロムには_.pdf
_および_<object>
_要素のいずれかで_<embed>
_を表示する際に問題があります。 埋め込みオブジェクトを使用したPDFの表示を参照してくださいBlob URLのタグ 、 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);
});
});
});
_
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
バージョン1 _jquery-ajax-blob-arraybuffer.js
_、jQuery.ajax()
;バージョン2 fetch()
、.arrayBuffer()
私は guest271314 が好きです。特にフェッチを使用する2番目のバージョンではよく答えますが、ポリフィルや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();
この方法を実際に実行するために、guest271314s plnkrを分岐させました: http://plnkr.co/edit/7tfBYQQdnih9cW98HSXX?p=preview
私のテストから、応答はresponse.dataではなく応答にあるため、次のように動作するはずです。
$.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);
});
JQueryは応答を使用して何かを実行しているように見えますが、空白PDF出力...( javascriptを使用してダウンロードする場合、PDFは空白です )。
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();