【问题标题】:PDF export from Java web application, with client-side visualizations从 Java Web 应用程序导出 PDF,带有客户端可视化
【发布时间】:2013-01-12 03:00:12
【问题描述】:

我一直在使用服务器端 Java 将 HTML + CSS 转换为 PDF,例如 Flying Saucer (http://code.google.com/p/flying-saucer/)

现在我需要看看随着 RaphaelJS 等客户端可视化 API 的增长而出现的替代方法,这些 API 也应该包含在 PDF 导出中。

理想情况下,我只需要一个打印友好的布局和 CSS(有点像 Google 地图),并且会有一些神奇的方式让 Javascript 调用可以静默地将窗口“打印”到 PDF 文件,而不是让一个单独的 PDF 生成管道。

有这种事吗?

如果没有,您会推荐哪些其他方法?

例如

  • 使用 node.js 或 Rhino 运行 Raphael 服务器端,使用 Batik 将 SVG 输出转换为图像,在服务器端渲染 PDF
  • 同样的事情,但要从 Raphael 已经在客户端完成的工作中获取 SVG
  • 在服务器上做一个无头浏览器,如 wkhtmltopdf 或 phantomjs,以捕获并执行生成的 HTML/JS 服务器端。

这些方法或其他建议是否成功?

【问题讨论】:

标签: svg pdf-generation wkhtmltopdf phantomjs


【解决方案1】:

这两个选项对我有用:

  • 使用 html2canvas 生成客户端 PNG(仅适用于支持画布的情况)

  • 使用 wkhtmltopdf 生成服务器端 PDF 或 PNG(您可能需要 xvfb

请询问您是否需要有关如何使用这些解决方案的更多详细信息。

【讨论】:

  • wkhtmltopdf 看起来是一个可行的选择。这比phantomjs好吗?
  • 我发现它更容易使用;您只需执行一个命令行即可在所需文件夹中获取 PDF(或 PNG)。如果你必须显示的页面是依赖于会话的,则可以添加 cookie。
【解决方案2】:

我为 PhantomJS 和 CasperJS 设置了一个(非常)简单的测试,以便能够使用无头浏览器打印 PDF 服务器端。它确实需要额外的非 Java 工具,但我认为这种方法更具前瞻性。 在这些示例中,我能够动态加载网页,让 Angular 初始化,然后与 Javascript 代码交互,以便像用户在真实浏览器中修改页面一样打印页面。

这是我的例子:https://github.com/fmarot/miscPOC/tree/master/angularAppOutputPDF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多