15

AJAX呼び出しを介してPDF(サーバー側で作成され、Webストリームとしてクライアント側に渡される)を表示しようとしています。私のコードは以下のとおりです。

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ストリームを含む成功関数の「データ」。ページを送信せずに、AJAX 呼び出しの成功関数内でブラウザーで PDF ファイルを開く方法はありますか? サーバー側では、PDF も物理的に生成されません。あなたの助けに非常に感謝します....

4

4 に答える 4

16

なぜ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);
        }
    });
});
于 2013-01-28T09:39:55.377 に答える
7

これが私のこの問題への対処法です。これは、この pdfmake ファイル ( https://github.com/bpampuch/pdfmake/blob/master/src/browser-extensions/pdfMake.js )の 50 行目に基づいています。

  1. PDF ストリームがあると仮定すると、それを base64 に変換し、AJAX にエコー バックします。

    $pdfString = $mpdf->Output('', 'S');
    $pdfBase64 = base64_encode($pdfString);
    echo 'data:application/pdf;base64,' . $pdfBase64;
    
  2. これが私のAJAXコードです。データを受信すると、新しいウィンドウが開き、url が base64 endoded データに置き換えられます。

    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 文字列が表示されることです。

于 2016-03-10T13:13:50.587 に答える
0

AJAX 呼び出しに送り返す代わりに、サーバーに保存されている PDF ファイルにアクセスするための一時 URL を生成できます。生成された URL をクライアントに返すだけです。次に、URL を受け取ったら、たとえばwindow.location =、ブラウザをダウンロードにリダイレクトすることができます。

Content-Disposition: attachment生成されたファイル(など)に正しいヘッダーが設定されていることを確認してください。すべて問題ありません。

編集:おそらく、通常の (JavaScript 以外の) リンクを使用してファイルを生成およびダウンロードできますが。ただし、AJAX 経由で行うと、ファイルの生成中に特定のアニメーションなどをユーザーに表示できます。

于 2013-01-28T09:44:44.123 に答える