繁体   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