Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Play Framework:从使用Javascript绘制图形的模板生成PDF_Java_Javascript_Pdf Generation_Playframework - Fatal编程技术网

Play Framework:从使用Javascript绘制图形的模板生成PDF

Play 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

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

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


有人对如何解决这个问题有什么想法吗?

因为您使用的是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