Play Framework:从使用Javascript进行绘图的模板生成PDF

时间:2011-11-29 01:41:27

标签: java javascript pdf-generation playframework

我有一个模板,其中包含一些用于在浏览器中生成图形的Javascript。我想使用相同的模板来创建PDF并作为附件发送到电子邮件中。在这种情况下,不会有浏览器/客户端交互。

我正在使用Play网站上提供的PDF模块,我已设法让PDF渲染工作。唯一的问题是图形不会显示在PDF中,但所有其他静态文本都会显示。我假设图表没有出现在PDF中,因为在生成PDF之前没有执行Javascript。

有没有人对如何解决这个问题有任何想法?

3 个答案:

答案 0 :(得分:1)

由于您使用的是Play框架,最简单的方法可能就是使用Rhino。 http://www.mozilla.org/rhino/这是Mozilla在JVM上运行的Javascript实现,这是Play框架运行的。您可能必须对Javascript进行一些更改,例如,如果它使用浏览器Canvas API,您必须创建一个Facade对象,将这些绘图命令发送到PDF绘图对象而不是屏幕。或者如果那是你想要的那个地方。

如果您提供有关Javascript图表代码的更多信息,您可能会得到更详细的答案。

答案 1 :(得分:0)

如果您找不到更好的选择,请考虑直接使用itext。它是pdf渲染库,用于pdf-plugin。你必须在pdf生成方面手动重写模板,但你可以完全控制结果。

答案 2 :(得分:0)

我不知道这对你有帮助,但这对我来说真的很快。

我将画布转换为PNG:

var datastring = document.getElementById('myCanvas').toDataURL("image/png");

然后我将该数据字符串发送到服务器,以便Play生成PDF并将变量传递给PDF生成器

public static void reportPDF(String graphData){
    PDF.renderPDF(graphData);
}

我的pdf代码如下所示:

    <body>
        <img width="100%" src="${graphData}"/>
    </body>