2012-06-21 2 views
3

Я пытаюсь полностью и полностью отобразить FusionCharts на сервере. Я знаю такие решения, как FCimg и FusionCharts .NET Solution. Я также реализовал Java-решение, которое использует класс Process для запуска wkhtmltoimage.Render и Export FusionCharts на сервере

Тем не менее, я пытаюсь найти чистое решение Java для этого. У меня есть html-файл, который включает в себя библиотеки JS FusionCharts и код для создания диаграммы слияния. Я нашел JxBrowser, который правильно отображает диаграмму, но для этого требуется X-Server для работы в Linux. Я также попробовал браузер Cobra/Lobo, но он не полностью поддерживает JavaScript. Существуют ли какие-либо другие способы рендеринга и экспорта графиков слияния на сервере или по крайней мере визуализировать html-файл, который полностью включает JavaScript на Java (и для этого не требуется xserver)?

Заранее благодарим за помощь!

ответ

1

Обновление: Решение, не требующее xserver: WebRenderer. Swing Edition - единственное издание, которое поддерживает HTML5 по состоянию на 9 июля 2012 года. Вы можете использовать версию swing для захвата изображения без графического интерфейса.

Я нашел способ использования SWT-браузера Eclipse. Однако это невозможно запустить в режиме без звука. Вы должны будете использовать xserver для реализации этого. См. this question.

Поскольку для этого требуется xserver и его нельзя запустить в режиме без звука, я бы предложил использовать 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"); }

  3. Теперь вы должны вызвать нагрузки() функцию OnLoad, создать DIV для визуализации диаграммы в, и в конце файла HTML. Например:

    <body onload="load()"> <div id="divNAMEHere"> test </div> </body> </html>

  4. Создайте новый класс, который импортирует затмение свт библиотеки браузера. Мгновенное отображение дисплея, оболочки и браузера (используйте это как руководство, чтобы понять, что происходит: http://www.roseindia.net/tutorials/swt/swt-browser.shtml).

  5. Введите текст браузера (browser.setText("htmlcode")) в html-код из template.html. Лучший способ сделать это - прочитать файл с помощью BufferedReader.

  6. И, наконец, изображение занимает некоторое время для рендеринга. Теперь, вероятно, есть лучший способ сделать это, но если вы хотите просто заставить его работать, я настроил счет, и он фиксирует изображение после определенного номера. Это то, что вам нужно добавить к концу:

    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); 
        } 
        } 
    } 
    
Смежные вопросы