I am doing below code in Laravel 5.5 with mpdf 8.0
$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('Hello World');
$mpdf->Output("test","I");
It outputs gibberish/garbage values, seemingly showing pdf file in raw form.
Some findings
- If I use
$mpdf->Output($reportPath, 'F');
(saving it to file) and the opening that. It opens the file as expected. - If I place
die();
after$mpdf->Output("test","I");
it shows the document. - My suspicion is, it has something something to do with
Content-type:application/pdf
not being set by default but I have also tried usingheader("Content-type:application/pdf");
beforeOutput
but of no use. it is still showingContent-Type: text/html; charset=UTF-8
in response header in Network tab of chrome (also tried Firefox).
Some back-story
- It used to work on
php7.3
just fine, but I have to update it tophp7.4
due to some library and multiple application on a single server scenario. - Also start using a sub-domain for my application instead of placing the directories after the domain.
I'm looking for
- A solution that doesn't require me to place
die;
at the end of output. - Or some clue in on why this has started happening or/and perhaps why I need to place
die;
afterOutput
. - Any other solution.
The goal is to provide some ref. for people encountering same issues in future, since I have spent hours and haven't anything that specifically address such issue.
CodePudding user response:
Ok, so I found out that I can't just rely on $this->mpdf->Output('test.pdf',"I")
to output my result (though it was working previously with the same line) to the browser.
Because for some reason it has started to send Content-Type:text/html
value in Content-Type
header so I had to change that.
Solution
I did it as below:
return response($this->mpdf->Output('test.pdf',"I"),200)->header('Content-Type','application/pdf');