【问题标题】:Dynamic HTML to PDF [closed]动态 HTML 到 PDF [关闭]
【发布时间】:2011-01-20 19:31:51
【问题描述】:

我需要能够将动态 HTML(由 javascript 在页面加载时呈现的 html)转换为 PDF。我知道有很多 HTML 到 PDF 转换器,但到目前为止我发现没有一个可以处理动态 HTML。

给定的工具应该能够成功转换以下页面 - http://www.simile-widgets.org/timeline/

干杯 安东尼

更新:

我在这里不需要 JavaScript 功能...即我不需要能够与屏幕交互...我只希望在 PDF 中捕获屏幕的最终渲染 - 就像拍照一样页面加载后。在我提供的示例中,javascript 只是将 div 呈现到屏幕上,所以只要它“让”“页面”首先呈现,它就没有什么不能处理的。

【问题讨论】:

  • 因为有很多问题与这个问题相似但又不完全相同,所以我决定尝试将 HTML 到 PDF 转换器的完整列表收集到一个社区 wiki 问题stackoverflow.com/questions/3178448/…
  • @rjmunro - 这听起来很有用,但页面已经消失了 - 您是否设法将列表发布到其他地方?
  • 你找到答案了吗?

标签: html pdf parsing pdf-generation dhtml


【解决方案1】:

试试 xhtml2pdf。这是project page at python.org

【讨论】:

  • 他想要一个能够理解 JavaScript 对页面所做更改的解决方案。
  • 我看不到在哪里可以测试实时 HTML 页面,而且它并没有说明太多关​​于 javascript 或 dhtml 的内容。
  • 对不起,有一个指向 Pisa 的 python 项目页面的链接。我更改了链接。
  • 问题仍然存在......它可以处理我描述的情况......即通过JavaScript在加载时生成的dhtml......
【解决方案2】:

您可以使用 javascript URI 来提醒当前 DOM。例如:

javascript:alert("<html>" + document.documentElement.innerHTML + "</html>")

复制 HTML 并保存到文件中。
然后通过 HTML2PDF 转换器运行它。

【讨论】:

  • 它需要是一个自动化的过程......即用户点击一个按钮,他们可以下载报告......
  • 如果您指的是页面中的按钮(而不是浏览器),那么您显然可以控制站点,因此您可以使用 XMLHttpRequest 将 HTML 发布到服务器并通过服务器上的转换器运行它。
【解决方案3】:

没有办法做到这一点。与您在 Web 浏览器中享受的完整 DOM 和 BOM 访问相比,可用于 PDF 脚本的界面极为有限。您可以在 PDF 中实现的这种交互无法从它在浏览器中的工作方式轻松转换,并且几乎肯定需要手工创作。

您的示例页面有很多效果,PDF 作为一种本质上是静态的文档布局格式,根本无法重现。

编辑:

我只想在 PDF 中捕获屏幕的最终渲染

啊,好吧,那是一个更容易和更常见的问题。

在这种情况下,您必须使用真正的网络浏览器(如 Firefox)或提供网络浏览器所有逻辑的工具包(如 WebKit)并实现自动化,然后:

  • 使用 Firefox 中的“打印到文件”等内置工具(打开背景图像/颜色)或 PDF 导出插件之一导出为 PDF,或

    李>
  • 为浏览器拍摄图像快照(如果需要,可以将图像包含在 PDF 中)

有关浏览器快照的一些讨论,请参阅 these questions

【讨论】:

  • 不正确。现在可以将 Flash 添加到 pdf 文件中。但是我不知道 javascript 到 actionscript/flash 的转换路径。 :)
【解决方案4】:

它使用任何 JavaScript 的事实意味着很多转换器无法工作。 JavaScript 可能很简单,但您仍然需要一个解释器来处理它。

我自己没用过,但你可以试试wkhtmltopdf。它使用 webkit 渲染引擎,我相信它包含完整的 javascript 支持。您需要能够安装软件并运行可执行文件,否则它应该相当简单。

【讨论】:

    【解决方案5】:

    动态-html-pdf

    这是 node js 将动态 html 转换为 pdf 的最佳库。

    https://www.npmjs.com/package/dynamic-html-pdf

    【讨论】:

    • 你确定,它不仅仅是因为它的车把模板而被称为“动态”吗?仅仅因为执行服务器端javascript(节点),并不意味着客户端javascript也是如此。快速浏览后,文档没有提到客户端 javascript 执行。
    【解决方案6】:

    您可能可以使用PhantomJSheadless chrome

    【讨论】:

      猜你喜欢
      • 2017-02-14
      • 2011-10-03
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 2011-02-24
      • 2022-10-14
      • 2010-11-27
      相关资源
      最近更新 更多