簡體   English   中英

使用打印布局將HTML頁面保存為PDF

[英]Save HTML page to PDF with print layout

我想允許我的用戶將頁面另存為PDF。 我已經創建了一個打印樣式表,並且可以使用Javascript的print功能來生成PDF。 這是我的問題:

Chrome中 ,瀏覽器會生成預覽並將其顯示給用戶。 然后,用戶可以保存它或打印它。

但是,在IE和FF中, print調用一個復雜的菜單,盡管它可以通過“打印”到PDFCreator 生成PDF,但這是一個復雜的過程,許多用戶無法理解。

我要做的是以某種方式為非Chrome用戶復制Chrome功能。 我考慮過的選擇:

  • 截屏HTML頁面,然后使用Javascript將圖像渲染為PDF。 有執行此操作的庫,但是我希望我的PDF具有打印布局。
  • 在服務器上生成PDF並將其發送到用戶的瀏覽器。 可以做到這一點,但是似乎很難使用與標准頁面相同的HTML。

我的服務器正在運行PHP和Zend框架。 我無法使用NodeJS或任何無頭瀏覽器在服務器上進行渲染。 我有什么選擇嗎?

在使用稱為dompdf( https://github.com/dompdf/dompdf )的庫之前,我已經完全完成了您想做的事情。 這是我的用法:

我將dompdf庫放入ZF項目的“ library”文件夾中。 然后,在准備渲染頁面的應用程序中,創建了一個新的Zend_View()對象,並使用所需的任何視圖腳本變量對其進行設置。 然后,我調用render()函數並將渲染的輸出存儲到變量中,然后將其提供給dompdf。 代碼如下:

        $html = new Zend_View();
        $html->setScriptPath(APPLICATION_PATH . '/views/scripts/action_name/');
        $html->assign($data); //$data contains the view variables I wanted to populate.
        $bodyText = $html->render('pdf_template.phtml');
        require_once(APPLICATION_PATH."/../library/dompdf/dompdf_config.inc.php");
        $dompdf = new DOMPDF();
        $dompdf->load_html($bodyText);
        // Now you can save the rendered pdf to a file or stream to the browser:
        $dompdf->stream("sample.pdf");

        // Save to file:
        $dompdf->render();
        $pdf = $dompdf->output();
        file_put_contents($filename, $pdf);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM