pdfGenerator = new Browsershot(); $this->headerHtml = view('projectsClients.pdf._header')->render(); $this->footerHtml = view('projectsClients.pdf._footer')->render(); } //Load views public function loadView(string $bladeFile, array $data = []): self { $this -> html = view($bladeFile, $data)->render(); return $this; } //Load HTML public function loadHtml(string $html): self { $this -> html = $html; return $this; } public function loadUrl(string $url): self { $this -> html = url($url); return $this; } //Function to generate PDFs public function generate(): Browsershot { return $this->pdfGenerator ->html($this->html) ->format('A4') ->margins(10, 20, 10, 20) ->showBrowserHeaderAndFooter() ->headerHtml($this->headerHtml) ->footerHtml($this->footerHtml) ->waitUntilNetworkIdle(); } //Function to save to server in public folder public function save(string $path): void { $this->generate()->savePdf($path); } //Function to save the PDF to client with specific filename public function download(string $filename) { $pdf = $this->generate()->pdf(); return new Response($pdf, 200, [ 'Content-Type' => 'application/pdf', 'Content-Disposition' => 'attachment; filename="'.$filename.'"', 'Content-Length' => strlen($pdf) ]); } //Function to view PDF in browser public function stream(string $filename) { $pdf = $this->generate()->pdf(); return new Response($pdf, 200, [ 'Content-Type' => 'application/pdf', 'Content-Disposition' => 'inline; filename="'.$filename.'"' ]); } }