2011-11-29 85 views
2

我有一个模板,它有一些Javascript用于在浏览器中生成图形。我希望使用相同的模板创建PDF并作为电子邮件中的附件发送。在这种情况下,将不存在浏览器/客户端交互。Play Framework:从使用Javascript绘制图形的模板生成PDF

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

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

回答

1

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

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

+0

我们使用呈现为SVG的hicharts库(highcharts.com)。 – digiarnie

+0

而人们正在使用Rhino在服务器上运行highcharts http://highslide.com/forum/viewtopic.php?f=9&t=6971&start=15 –

+0

@Michael我是你提到的“人”,我们放弃了犀牛为highCharts。我们对(0,0,0,0)SVG元素的边界框有很多位置相关的问题,迫使我们重新实现Highcharts服务器端。我们使用wkhtmltopdf来代替 – Grooveek

0

如果您找不到更好的选择,请考虑直接使用itext。这是pdf-plugin中使用的pdf渲染库。您必须根据pdf生成手动重写模板,但您将完全控制结果。

0

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

我改变了帆布与一个PNG:

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

然后,我发送了datastring到服务器,以便播放生成PDF和我传递的变量为PDF生成器

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

我的pdf代码如下所示:

<body> 
     <img width="100%" src="${graphData}"/> 
    </body> 
相关问题