我有一个模板,其中包含一些用于在浏览器中生成图形的Javascript。我想使用相同的模板来创建PDF并作为附件发送到电子邮件中。在这种情况下,不会有浏览器/客户端交互。
我正在使用Play网站上提供的PDF模块,我已设法让PDF渲染工作。唯一的问题是图形不会显示在PDF中,但所有其他静态文本都会显示。我假设图表没有出现在PDF中,因为在生成PDF之前没有执行Javascript。
有没有人对如何解决这个问题有任何想法?
答案 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>