Как использовать библиотеку диаграмм JavaScript, такую ​​как D3.js или Raphaël в серверной Java-среде

Я хотел бы использовать D3.js (или, может быть, Raphaël) для созданных с помощью сервера отчетов, используя XSL-FO с Java. Эти библиотеки JavaScript должны использоваться по нескольким причинам:

  • Они отображают более красивые диаграммы, чем то, что я видел из библиотек Java (IMO)
  • Они поддерживают SVG и PNG (из того, что я знаю), что необходимо в XSL-FO
  • Они также будут использоваться во внешних частях приложения. Повторное использование их также на бэкэнд с Java сократило бы кривые обучения разработчиков и базу данных кода.

Таким образом, использование любых похожих библиотек Java является менее благоприятным вариантом.

Теперь самый простой способ использовать D3.js с Java - использовать тяжелый инструмент, например selenium, чтобы отобразить фиктивную HTML-страницу и выполните в нем JavaScript. Но мне это кажется излишним.

Есть ли более простой способ выполнить этот вид JavaScript непосредственно в одном и том же Java-процессе? Я спрашиваю, потому что D3.js предназначен для работы в контексте HTML-документа. Я не уверен, что это возможно сделать с Rhino или другими реализациями сценариев Java

Ответ 1

Вы можете использовать phantom.js. Это браузер без браузера, основанный на webkit, который позволяет запускать JavaScript без необходимости в браузере.

Используя это, вы можете просто выполнить системный вызов для запуска phantom.js с кодом и вводами JavaScript. Затем он создаст ваш выход. См. этот пример.

Ответ 2

Я работал над этим около года назад. Мне удалось получить части HighCharts (графическое изображение SVG в javascript), работающее с Rhino. Я должен был подключить env.js к нему и столкнулся с множеством проблем относительно элемента холста, особенно вокруг вычислений Bounding Boxes. Объекты в Rhino не реализуют getBBox(), что нелегко подделать.

Моя цель состояла в том, чтобы, наконец, сделать его в PDF с помощью Batik... Это заняло слишком много времени, и мы решили переключиться на другую технологию.

Итак, сегодня мы используем wkhtmltopdf, который не является Java, но является статическим исполняемым файлом, который может быть встроен в банку и легко запускается со стороны java. Кстати, xvfb является обязательным для Linux, если вы хотите что-то сделать. Это очень похоже на PhantomJS