Как использовать библиотеку диаграмм 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
Ответ 3
Возможно, вы захотите взглянуть на эти обертки d3:
https://github.com/stefaneidelloth/javafx-d3
https://github.com/gwtd3/gwt-d3
- "Графики Freecode и D3 Wrapper":
https://vaadin.com/directory#!addon/freecode-charts-and-d3-wrapper