Search code examples
laravellaravel-5pdf-generationmpdfphp-7.4

MPDF in Laravel can't output (inline) pdf


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 using header("Content-type:application/pdf"); before Output but of no use. it is still showing Content-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 to php7.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; after Output.
  • 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.


Solution

  • 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');