更新:不需要 xserver: WebRenderer的解决方案。Swing 版是截至 2012 年 7 月 9 日唯一支持 HTML5 的版本。您可以使用 swing 版来捕获图像而无需 GUI。
我找到了一种使用 Eclipse 的 SWT 浏览器的方法。但是,这不能在无头模式下运行。您将不得不使用 xserver 来实现它。看到这个问题。
由于这需要 xserver 并且不能在无头模式下运行,我建议使用 JxBrowser。它要简单得多,您只需要生成一个包含所有融合图表脚本的 html 文件。见#1、#2、#3
您必须创建一个包含标题 ( <html><head>
)、jquery.min.js、FusionCharts.js、FusionCharts.HC.js、FusionCharts.HC.Charts.js 的 template.html 文件。确保这些脚本中的每一个都在它们自己的脚本标签中 ( <script type="text/javascript"> [js code] </script>
)
现在添加另一个 JavaScript 函数,它有自己的脚本标签,其中包含渲染图表的步骤。例如:
function load() { FusionCharts.setCurrentRenderer('javascript'); var chart = new FusionCharts("swf", 'chart0', "width", "height", "0", "1"); chart.setXMLData("XML DATA HERE"); chart.render("divNAMEHere"); }
现在您需要调用 load() 函数 onload,创建一个 div 来呈现图表,并结束 html 文件。例如:
`
测试`
创建一个导入 eclipse swt 浏览器库的新类。实例化显示、Shell 和浏览器(以此为指导帮助了解正在发生的事情:http ://www.roseindia.net/tutorials/swt/swt-browser.shtml )。
将浏览器的文本 ( browser.setText("htmlcode")
) 设置为来自 template.html 的 html 代码。最好的方法是使用 BufferedReader 读取文件。
最后,图像需要一些时间来渲染。现在可能有更好的方法来做到这一点,但如果你想让它正常工作,我会设置一个计数,它会在一定数量后捕获图像。这是您需要添加到最后的内容:
int i = 0;
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
i++;
// System.out.println(i);
if(i==100)
{
GC source = new GC (shell);
Image image = new Image(display, browser.getClientArea());
source.copyArea(image, 0, 0);
ImageLoader io = new ImageLoader ();
io.data = new ImageData[] { image.getImageData() };
File f = new File (currentDir+"/workpng.png");
io.save (f.getAbsolutePath(), SWT.IMAGE_PNG);
}
}
}