如何使用chrome-php/chrome从Blade视图直接输出PDF到浏览器?

k75qkfdt  于 2023-05-16  发布在  PHP
关注(0)|答案(2)|浏览(158)

我尝试使用chrome-php/chrome加载刀片视图,然后将其输出到浏览器,而不是保存它。
然而,使用他们的GitHub中的文档,我无法构建一个这样做的工作代码。
我试过:

public function createPdf(Request $request)
{
    $page = $browser->createPage();
    $page->navigate('http://example.com/path-to-blade-file')->waitForNavigation();
    $html = $page->getHtml(10000);
    header('Content-Description: File Transfer');
    header('Content-Type: application/pdf');
    header('Content-Disposition: inline; filename=filename.pdf');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');

    // How to then use the HTML from the Blade to display the PDF?
}

但是我不能使用他们的方法直接用echo base64_decode($pdf->getBase64())输出到浏览器,因为我有一个HTML字符串而不是$pdf对象,我找不到从HTML创建PDF的方法
另外,是否有更好的方法来加载刀片视图,而不是使用完整的URL?

eoigrqb6

eoigrqb61#

我设法让它工作,我首先需要将刀片视图转换为原始HTML字符串,然后使用setHtml()设置无头chrome示例的页面内容,然后在页面上调用pdf()方法并在解码其base64值后输出:

use HeadlessChromium\BrowserFactory;

    public function createPdf(Request $request)
    {
        $browserFactory = new BrowserFactory();

        // starts headless chrome
        $browser = $browserFactory->createBrowser();

        try {
            // convert blade view to raw HTML string
            $bladeViewRawHtmlString = view('blade-view')->render();

            // creates a new page and set the HTML
            $page = $browser->createPage();            
            $page->setHtml($bladeViewRawHtmlString);

            // pdf
            header('Content-Description: File Transfer');
            header('Content-Type: application/pdf');
            header('Content-Disposition: inline; filename=filename.pdf');
            header('Content-Transfer-Encoding: binary');
            header('Expires: 0');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Pragma: public');

            $pdf = $page->pdf(['printBackground' => false]);
            echo base64_decode($pdf->getBase64());
        } finally {
            // bye
            $browser->close();
        }
    }
4nkexdtk

4nkexdtk2#

我曾经将PDF文件保存在存储路径中,用Storage::download('path.pdf')下载。

相关问题