Ajaxでフォームの内容をPHPに渡してPDFを作成し文字列を引き渡し、受け取った文字列をjavascriptでPDF化したい

実現したいこと

Laravel8を利用し、WEBアプリを作成しています。
HTML上で作成したフォームを非同期でPOSTしてPHPにフォーム内容を受け渡し、TCPDFを活用してPDF化。
その後、PDFを文字列として出力(Output($path, "S"))し、出力した文字列をJSON形式でクライアント側に受け渡し、javascriptを用いてPDFを再構築させようと考えています。
伺いたいのは下記の点です。

前提

Laravel8.83.27
PHP 8.1.17
使用ブラウザ:Safari/Chrome

該当のソースコード

javascript

1$("#download").click(function () {2 var formdata = new FormData($('#form-id')[0]);3 4 $.ajax({5 headers: {6 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')7 }, //Headers 必須。呪文8 url: "{{ route('ajaxdownload.post') }}",9 method: 'POST', //リクエストタイプ10 dataType: 'JSON',11 data: form,12 processData: false,13 contentType: false,14 data: formdata,15 //リクエストが完了するまで実行される16 beforeSend: function () {17 document.getElementById('download_message').innerHTML = "ダウンロード中。。。";18 }19 })20 // Ajaxリクエスト成功時の処理21 .done(function (json) {22 console.log(json);23 let str = JSON.stringify(json);24//↑ここまで成功!25//↓ここからが分からず。。。。26//最終的に、PDFにファイルを自動DLしたい。27 28 console.log("ajaxでPDFのDL成功!");29 })30 // Ajaxリクエスト失敗時の処理31 .fail(function (jqXHR, textStatus, errorThrown) {32 alert('ダウンロードに失敗しました。本ページのスクリーンショットを保存し、送信ボタンを押してください。');33 console.log("ajax通信に失敗しました。Chromeコンソール画面のプレビューからエラー詳細を確認してください。");34 console.log("jqXHR : " + jqXHR.status); // HTTPステータスが取得35 console.log("textStatus : " + textStatus); // タイムアウト、パースエラー36 console.log("errorThrown : " + errorThrown.message); // 例外情報37 document.getElementById('download_message').innerHTML = "ダウンロード失敗。スクリーンショットを撮ってください。";38 })39 // 成否にかかわらず実行40 .always(function () {41 $('#post_button').show();42 })43 44})

PHP

1public function ajax_download(Request $e)2 {3 //DDD("PHP来たよ!");4 //連想配列を作成5 $request = [6 //formの中身を連想配列に変換7 ];8 $pdfdata = $this->pdf_export($request); //←このfunctionの中でnew TCPDF_FONTS();し、受け取ったformの内容を座標指定してPDFを作成9 $pdf = $pdfdata["pdf"];10 $path = $pdfdata["path"];//PDFの格納先のpath11 $JSON_PDF = mb_convert_encoding($pdf->Output($path, "S"), 'UTF-8', 'UTF-8');12 $array = ['JSON_PDF' => $JSON_PDF];13 //json形式で返却14 return response()->json($array);15 }

補足情報(FW/ツールのバージョンなど)

知識不足な上丸投げな質問しかできず申し訳ありません。。
もしかしたら基礎的な知識が不足している場合もありますので、必要な情報が他にあればご指摘いただければ幸いです。
ご教授お願い致します!

コメントを投稿

0 コメント