下記のようなコードを書いているのですが、safariでpdf出力できる時とできないときがあます。
調べてみたところ、下記の4つのどれかが原因のようですが、よくわかりません。
解決方法を教えていただけないでしょうか?
1、 safari > preferences > privacy > archive.orgの削除
2、 safariでのパースエラー
3、 chunkでデータを送る際に、EOFの前の空行がない
4、 nginxのhttp2_max_field_sizeが小さい
下記がコードになります。
$pdf = \PDF::loadView('layouts.pdf', $data); $pdf->setOption('user-style-sheet', public_path().'/css/pdf.css'); $pdf->setPaper('a4'); $pdf->setOption('encoding', 'utf-8'); $res = $pdf->inline(); return new Response( $res, 200, array( 'Content-Type' => 'application/pdf', 'Content-Disposition' => 'attachment; filename="file.pdf"' ) );
フロントはvueで実装しており、apiと受け取った後の表示コードになります。
// api axios.get('/api/pdf', { responseType: 'arraybuffer' }).then( res => { console.log('get pdf res = ', res) context.commit('setPdf', res.data) } ).catch( async err => { console.log('err get pdf = ', err) context.commit('common/setError', 'PDF出力が失敗しました', { root: true }) } )
// 表示 const newBlob = new Blob([newVal], {type:'application/pdf'}) if(window.navigator.msSaveOrOpenBlob) { console.log('------- in ') window.navigator.msSaveOrOpenBlob(newBlob, 'myself.pdf'); }else{ console.log('pdf ------- in createObject URL') const url = URL.createObjectURL(newBlob) window.open(url, "_blank"); }
あなたの回答
tips
プレビュー