javascript - 将 HTML 页面保存为带有打印布局的 PDF

标签 javascript pdf zend-framework cross-browser

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

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

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

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

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

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

最佳答案

在使用名为 dompdf ( https://github.com/dompdf/dompdf ) 的库之前,我已经完成了您想要做的事情。以下是我的使用方法:

我将 dompdf 库放入 ZF 项目的“library”文件夹中。然后,在我的应用程序中,当我准备好渲染页面时,我创建了一个新的 Zend_View() 对象,并使用所需的任何 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);

关于javascript - 将 HTML 页面保存为带有打印布局的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36288824/

相关文章:

javascript - querySelectorAll 不选择带有名称的选择框

php - JSON 和 AJAX 响应

javascript - 如何检测shift +向右箭头+ Angular 其他键

c++ - Qt:自动生成power point报告或可编辑pdf报告

php - Zend框架/表格: custom elements not shown on error

javascript - 按钮仅位于一个 div 中的固定位置

html - 通过 htmldoc 在每个页面上重复 thead

php - 现在 Zend Query 已被弃用,在 url 中发布查询的最佳方式是什么?

zend-framework - 从 Zend_Controller_Action 动态包含 .js 文件?

c# - 加载 PDF 文档时出错 - iTextSharp PDF