Play Framework:从使用Javascript绘制图形的模板生成PDF
我有一个模板,其中包含一些用于在浏览器中生成图形的Javascript。我想使用相同的模板来创建PDF,并在电子邮件中作为附件发送。在这种情况下,将不会有浏览器/客户端交互 我正在使用Play网站上提供的PDF模块,我已经设法使PDF渲染工作正常。唯一的问题是,图形不会显示在PDF中,但所有其他静态文本都会显示。我假设图形没有出现在PDF中,因为在生成PDF之前没有执行JavascriptPlay Framework:从使用Javascript绘制图形的模板生成PDF,java,javascript,pdf-generation,playframework,Java,Javascript,Pdf Generation,Playframework,我有一个模板,其中包含一些用于在浏览器中生成图形的Javascript。我想使用相同的模板来创建PDF,并在电子邮件中作为附件发送。在这种情况下,将不会有浏览器/客户端交互 我正在使用Play网站上提供的PDF模块,我已经设法使PDF渲染工作正常。唯一的问题是,图形不会显示在PDF中,但所有其他静态文本都会显示。我假设图形没有出现在PDF中,因为在生成PDF之前没有执行Javascript 有人对如何解决这个问题有什么想法吗?因为您使用的是Play框架,最简单的方法可能是使用Rhino。这是Mo
有人对如何解决这个问题有什么想法吗?因为您使用的是Play框架,最简单的方法可能是使用Rhino。这是Mozilla在JVM上运行的Javascript实现,Play框架就是在JVM上运行的。您可能需要对Javascript进行一些更改,例如,如果它使用浏览器画布API,则必须创建一个facade对象,将这些绘图命令发送到PDF绘图对象,而不是屏幕。或者两个地方都去,如果这是你想要的
您可能会得到更详细的答案,如果您提供更多关于JavaScript图形代码的信息。
< P>如果您找不到更好的选项,请考虑直接使用ITEXT。它是pdf插件中使用的pdf渲染库。在生成pdf时,您必须手动重写模板,但您可以完全控制结果。我不知道这是否对您有帮助,但这对我来说非常有效 我将画布转换为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>
我们正在使用hicharts库(highcharts.com)来呈现SVG。人们正在使用Rhino在服务器上运行highcharts@Michael I是您提到的“人”,我们放弃了Rhino,转而使用highcharts。我们在SVG元素的(0,0,0,0)边界框中遇到了大量与位置相关的问题,这迫使我们在服务器端重新实现Highcharts。我们改用wkhtmltopdf