从Java Web应用程序导出PDF,具有客户端可视化

时间:2013-01-28 17:28:02

标签: svg pdf-generation wkhtmltopdf phantomjs

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

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

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

有没有这样的事情?

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

例如

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

任何这些方法或其他建议都取得了成功吗?

2 个答案:

答案 0 :(得分:1)

这两个选项对我有用:

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

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

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

答案 1 :(得分:1)

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

以下是我的示例:https://github.com/fmarot/miscPOC/tree/master/angularAppOutputPDF