gpt4 book ai didi

java - 在服务器上渲染和导出 FusionCharts

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:13:03 26 4
gpt4 key购买 nike

我正在尝试在服务器上完全渲染和导出 FusionCharts。我知道 FCumg 和 FusionCharts .NET 解决方案等解决方案。我还实现了一个使用 Process 类运行 wkhtmltoimage 的 Java 解决方案。

但是,我正试图找到一个纯 Java 解决方案来执行此操作。我有一个 html 文件,其中包含 FusionCharts JS 库和用于生成融合图表的代码。我发现 JxBrowser 可以正确呈现图表,但它需要 X-Server 才能在 Linux 上运行。我也尝试过 Cobra/Lobo 浏览器,但它不完全支持 JavaScript。是否有任何其他方法可以在服务器上呈现和导出融合图表,或者至少呈现一个 html 文件,该文件完全包含 Java 中的 JavaScript(并且不需要 xserver)?

在此先感谢您的所有帮助!

最佳答案

更新:不需要xserver的解决方案:WebRenderer .截至 2012 年 7 月 9 日,Swing 版是唯一支持 HTML5 的版本。您可以使用 swing 版在没有 GUI 的情况下捕获图像。


我找到了一种使用 Eclipse 的 SWT 浏览器的方法。但是,这不能在 headless 模式下运行。您将不得不使用 xserver 来实现它。参见 this question .

因为这需要 xserver 并且不能在 headless 模式下运行,所以我建议使用 JxBrowser。它要简单得多,您只需要生成一个包含所有融合图表脚本的 html 文件。参见#1、#2、#3

  1. 您必须创建一个包含标题的 template.html 文件( <html><head> ), jquery.min.js, FusionCharts.js,FusionCharts.HC.js,FusionCharts.HC.Charts.js。确保每个这些脚本在它们自己的脚本标签中 ( <script type="text/javascript"> [js code] </script> )

  2. 现在添加另一个 JavaScript 函数,它有自己的脚本标记,其中包含呈现图表的步骤。例如:

function load() { FusionCharts.setCurrentRenderer('javascript'); var chart = new FusionCharts("swf", 'chart0', "width", "height", "0", "1"); chart.setXMLData("XML DATA HERE"); chart.render("divNAMEHere"); }

  1. 现在您需要调用 load() 函数 onload,创建一个 div 来呈现图表,并结束 html 文件。例如:

    `

测试 `
  1. 创建一个导入 eclipse swt 浏览器库的新类。实例化 Display、Shell 和 Browser(将此用作指南以帮助理解正在发生的事情:http://www.roseindia.net/tutorials/swt/swt-browser.shtml)。

  2. 将浏览器的文本 ( browser.setText("htmlcode") ) 设置为来自 template.html 的 html 代码。执行此操作的最佳方法是使用 BufferedReader 读取文件。

  3. 最后,图像需要一些时间来渲染。现在可能有更好的方法来做到这一点,但如果你只想让它工作,我设置了一个计数,它会在一定数量后捕获图像。这是您需要添加到末尾的内容:

    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);
    }
    }
    }

关于java - 在服务器上渲染和导出 FusionCharts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11138852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com