AJAX呼び出しを使用して、サーバー側で作成され、Webストリームとしてクライアント側に渡される)PDFを表示しようとしています。私のコードを以下に示します。
jQuery.ajax({
type: "POST",
processData: false,
url: "aaaa.p?name=pdf",
data: inputxml,
contentType: "application/xml; charset=utf-8",
success: function(data)
{
// here the data is the PDF stream i'm getting from the server side.
}
});
「inputxml」には、サーバーがPDFを作成するための入力パラメーターが含まれています。 PDFストリーム。==の成功関数内のブラウザでPDFファイルを開く方法はありますか? AJAXページ送信なしで呼び出しますか?サーバー側ではPDFは物理的に生成されません。ご協力に感謝します。..
なぜAJAX経由でロードするのですか?必要なときに生成したIFRAMEにロードしてみませんか。標準のブラウザプラグインは、そのiframe内に表示します。
$('#link').click(function(e) {
e.preventDefault(); // if you have a URL in the link
jQuery.ajax({
type: "POST",
processData: false,
url: "aaaa.p?name=pdf",
data: inputxml,
contentType: "application/xml; charset=utf-8",
success: function(data)
{
var iframe = $('<iframe>');
iframe.attr('src','/pdf/yourpdf.pdf?options=first&second=here');
$('#targetDiv').append(iframe);
}
});
});
この問題に対処する私の方法は次のとおりです。このpdfmakeファイルの50行目に基づいています( https://github.com/bpampuch/pdfmake/blob/master/src/browser-extensions/pdfMake.js )。
pdfストリームがあると仮定して、base64に変換し、AJAXにエコーバックします。
$pdfString = $mpdf->Output('', 'S');
$pdfBase64 = base64_encode($pdfString);
echo 'data:application/pdf;base64,' . $pdfBase64;
ここに私のAJAXコード。データを受信すると、新しいウィンドウが開き、urlがbase64内挿データに置き換えられます。
var ajaxRequest = $.ajax({
url: "php/generate-pdf/print-control.php",
data: '',
cache: false,
contentType: 'application/json',
processData: false,
type: 'POST'
});
$.when(ajaxRequest).done(function (ajaxValue) {
var win = window.open('', '_blank');
win.location.href = ajaxValue;
});
このメソッドの欠点は、アドレスバーにbase64文字列を取得することです。
iframeにロードできるBlobから「オブジェクトURL」を作成します
axios({
url: `path/to/pdf`,
method: "GET",
responseType: 'arraybuffer'
}).then((response) => {
let blob = new Blob([response.data], { type: response.headers['content-type'] } );
let url = window.URL.createObjectURL(blob);
$('#frame').attr('src',url);
});
一時URLを生成して、PDF呼び出しに送信する代わりに、サーバーに保存されているAJAXファイルにアクセスします。生成されたURLを返すだけです。次に、URLを受け取ったら、たとえばwindow.location =
ブラウザをダウンロードにリダイレクトします。
生成されたファイルに正しいヘッダーが設定されていることを確認してください(Content-Disposition: attachment
など)、すべてが正常である必要があります。
編集: ただし、通常の(非JavaScript)リンクを使用してファイルを生成およびダウンロードすることもできます。ただし、AJAXを使用して実行すると、ファイルの生成中に特定のアニメーションなどをユーザーに表示できます。