2017-05-09 14 views
0

私は、安全なPHP API呼び出しを呼び出すAJAX呼び出しを持っています。このAPI呼び出しは、PDFファイルのデータを実際には生成せずに生成して返します。このPDFファイルのデータをjavascript/jqueryで使用して、PDFファイルを作成してユーザーにダウンロードするにはどうすればよいですか?javascriptとPDFデータを使ってその場でPDFを作成するには?

私はもともとajax呼び出しの頭をPDFの頭に設定しようとしましたが、明らかにajax経由でファイルをダウンロードすることはできません。

+0

PDFを作成してBase64エンコーディングで返すためのPHP APIにアクセスできますか? – user1628733

+1

@ user1628733はい。 Base64エンコーディングでPDFデータを返します。 – David

答えて

0

ajaxコールからファイルを自動的にダウンロードするには、次の操作を行います。私の例では、ファイル名、MIMEタイプ、およびBase64データを含むオブジェクトを返しましたが、これはあなたが探していることを行う方法についてのアイデアを与えることができます。

PostDTO('/ReportService.asmx/DownloadReport', dto, function (result) { 
       var a = document.createElement('a'); 
       if (window.URL && window.Blob && ('download' in a) && window.atob) { 
        // Do it the HTML5 compliant way 
        var blob = base64ToBlob(result.FileDataBase64, result.MimeType); 
        var url = window.URL.createObjectURL(blob); 
        a.href = url; 
        a.download = result.Filename; 
        a.click(); 
        window.URL.revokeObjectURL(url); 
       } 
      }); 

function base64ToBlob(base64, mimetype, slicesize) { 
     if (!window.atob || !window.Uint8Array) { 
      // The current browser doesn't have the atob function. Cannot continue 
      return null; 
     } 
     mimetype = mimetype || ''; 
     slicesize = slicesize || 512; 
     var bytechars = atob(base64); 
     var bytearrays = []; 
     for (var offset = 0; offset < bytechars.length; offset += slicesize) { 
      var slice = bytechars.slice(offset, offset + slicesize); 
      var bytenums = new Array(slice.length); 
      for (var i = 0; i < slice.length; i++) { 
       bytenums[i] = slice.charCodeAt(i); 
      } 
      var bytearray = new Uint8Array(bytenums); 
      bytearrays[bytearrays.length] = bytearray; 
     } 
     return new Blob(bytearrays, { type: mimetype }); 
    }; 
0

ファイルはajaxからダウンロードできます。 私は角度のあるアプリケーションからそれをやった。 アイデア:

  1. ブロブを作成
  2. (それは角度であるように)データ応答は、あなたのフレームワークによって変換されていないことを確認してくださいファイルデータを取得し、「arrayBufferを」応答タイプを尋ねる
  3. : var blob = new Blob([data]、{type: 'application/pdf'); //タイプをチェックする
  4. URLを作成する:var url = URL.createObjectURL(blob);
  5. url:window.open(url);を開きます。

コンソールから生成されたblobを確認すると、blobのURLが表示されます。そのURLはあなたのpdfを開く必要があります。

関連する問題