Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用打印布局将HTML页面保存为PDF_Javascript_Pdf_Zend Framework_Cross Browser - Fatal编程技术网

Javascript 使用打印布局将HTML页面保存为PDF

Javascript 使用打印布局将HTML页面保存为PDF,javascript,pdf,zend-framework,cross-browser,Javascript,Pdf,Zend Framework,Cross Browser,我想允许我的用户将我的页面保存为PDF格式。我已经创建了一个打印样式表,可以使用Javascript的print函数生成PDF。我的问题是: 在Chrome中,浏览器生成预览并向用户显示。然后用户可以保存或打印它 然而,在IE和FF中,print调用了一个复杂的菜单,虽然它可以通过“打印”到PDFCreator生成PDF,但这是一个复杂的过程,许多用户不会理解 我想做的是以某种方式为非Chrome用户复制Chrome功能。我考虑过的备选方案: 截屏HTML页面并使用Javascript将该图像

我想允许我的用户将我的页面保存为PDF格式。我已经创建了一个打印样式表,可以使用Javascript的
print
函数生成PDF。我的问题是:

在Chrome中,浏览器生成预览并向用户显示。然后用户可以保存或打印它

然而,在IE和FF中,
print
调用了一个复杂的菜单,虽然它可以通过“打印”到PDFCreator生成PDF,但这是一个复杂的过程,许多用户不会理解

我想做的是以某种方式为非Chrome用户复制Chrome功能。我考虑过的备选方案:

  • 截屏HTML页面并使用Javascript将该图像呈现为PDF。有些库可以做到这一点,但我希望我的PDF具有打印布局
  • 在服务器上生成PDF并将其发送到用户的浏览器。这是可以做到的,但似乎很难使用与标准页面相同的HTML

我的服务器正在运行PHP和Zend框架。我不能使用NodeJS或任何无头浏览器在服务器上渲染。我有什么选择吗?

在使用名为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);