質問編集履歴

3

URLミス

2023/06/02 01:04

投稿

coool
coool

スコア29

test CHANGED
File without changes
test CHANGED
@@ -23,7 +23,8 @@
23
23
  Laravel8.83.27
24
24
  PHP 8.1.17
25
25
  使用ブラウザ:Safari/Chrome
26
- 参考にしたサイト:https://kumatech-lab.com/tcpdf-output(非同期でダウンロード)
26
+ 参考にしたサイト:https://kumatech-lab.com/tcpdf-output
27
+ (非同期でダウンロード)
27
28
 
28
29
  ### エラー文
29
30
  pdf_receipt_head.js:306 Uncaught TypeError: str.blob is not a function

2

フローの説明

2023/06/02 00:56

投稿

coool
coool

スコア29

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,17 @@
1
1
  ### 実現したいこと
2
2
 
3
3
  Laravel8を利用し、WEBアプリを作成しています。
4
+ 実現したい流れとしては下記の通りです。
5
+
6
+ ①クライアント側でフォームを入力する
7
+ ②フォーム入力後、ダウンロードボタンを押させる。
8
+ **③ボタン押下後、サーバーに保存してあるPDFのテンプレートを使用してフォーム内容を書き込み、一度ローカルデバイスに作成したPDFをダウンロードさせる。
9
+ **→こちらが今回の質問項目です。
10
+ ④デバイス上にPDFがダウンロードされたのを確認した後、改めて送信用のボタンを押させて内容をPOSTし、データをサーバーに保存する
11
+
12
+ ### 聞きたいこと
13
+
14
+ 上記③の内容を、下記のやり方で行おうと考えております。
4
15
  HTML上で作成したフォームを非同期でPOSTしてPHPにフォーム内容を受け渡し、TCPDFを活用してPDF化。
5
16
  その後、PDFを文字列として出力(Output($path, "S"))し、出力した文字列をJSON形式でクライアント側に受け渡します。
6
17
  受け取った文字列をjavascriptでBlobの形へ変換し、自動でダウンロードを行おうと考えています。

1

「javascriptを用いてPDFを再構築」という表現を変更、「文字列形式のPDFをblobの形に変換」に修正。参考URL追記

2023/06/02 00:34

投稿

coool
coool

スコア29

test CHANGED
File without changes
test CHANGED
@@ -2,15 +2,23 @@
2
2
 
3
3
  Laravel8を利用し、WEBアプリを作成しています。
4
4
  HTML上で作成したフォームを非同期でPOSTしてPHPにフォーム内容を受け渡し、TCPDFを活用してPDF化。
5
- その後、PDFを文字列として出力(Output($path, "S"))し、出力した文字列をJSON形式でクライアント側に受け渡し、javascriptを用いてPDFを再構築させようと考えています。
5
+ その後、PDFを文字列として出力(Output($path, "S"))し、出力した文字列をJSON形式でクライアント側に受け渡します。
6
+ 受け取った文字列をjavascriptでBlobの形へ変換し、自動でダウンロードを行おうと考えています。
6
7
  伺いたいのは下記の点です。
7
- - [ ] 文字列をクライアント側へ受け渡すところまで成功しましたが、その文字列をjavascriptでどうやってPDF直せばいいのかわかりません。
8
+ - [ ] 文字列形式のPDFを受け渡すところまで成功しましたが、その文字列をjavascriptでBlobの形に変換できません。
8
9
  - [ ] タブレットでの運用を考えていますが、Ajaxリクエスト成功時に自動ダウンロードをさせることは可能でしょうか。(Safari使用)
9
10
 
10
11
  ### 前提
11
12
  Laravel8.83.27
12
13
  PHP 8.1.17
13
14
  使用ブラウザ:Safari/Chrome
15
+ 参考にしたサイト:https://kumatech-lab.com/tcpdf-output(非同期でダウンロード)
16
+
17
+ ### エラー文
18
+ pdf_receipt_head.js:306 Uncaught TypeError: str.blob is not a function
19
+ (let blob = str.blob(); →js26行目☓)
20
+
21
+
14
22
 
15
23
  ### 該当のソースコード
16
24
 
@@ -40,7 +48,16 @@
40
48
  let str = JSON.stringify(json);
41
49
  //↑ここまで成功!
42
50
  //↓ここからが分からず。。。。
51
+ let blob = str.blob();
43
- //最終的に、PDFにファイルを自動DLしたい。
52
+ const url = URL.createObjectURL(blob);
53
+ const a = document.createElement('a');
54
+ document.body.appendChild(a);
55
+ a.href = url;
56
+
57
+ let filename = 'sample.pdf';
58
+ a.download = filename;
59
+ a.click();
60
+ a.remove();
44
61
 
45
62
  console.log("ajaxでPDFのDL成功!");
46
63
  })
@@ -64,7 +81,6 @@
64
81
  ```PHP
65
82
  public function ajax_download(Request $e)
66
83
  {
67
- //DDD("PHP来たよ!");
68
84
  //連想配列を作成
69
85
  $request = [
70
86
  //formの中身を連想配列に変換
@@ -84,3 +100,8 @@
84
100
  知識不足な上丸投げな質問しかできず申し訳ありません。。
85
101
  もしかしたら基礎的な知識が不足している場合もありますので、必要な情報が他にあればご指摘いただければ幸いです。
86
102
  ご教授お願い致します!
103
+
104
+ 2023.06.02
105
+ ご指摘をいただき、文章を修正いたしました。
106
+ AbeTakashi様、ご指摘ありがとうございます!
107
+