11

我想将D3.js(或者Raphaël)用于使用带有 Java 的 XSL-FO 生成的后端报告。应该使用这些 JavaScript 库有几个原因:

  1. 它们呈现的图表比我在 Java 库 (IMO) 中看到的更漂亮
  2. 它们支持 SVG 和 PNG(据我所知),这在 XSL-FO 中是必需的
  3. 它们还将用于应用程序的前端部分。在后端使用 Java 重用它们将减少开发人员的学习曲线和代码库占用空间。

因此,使用任何类似的 Java 库都是不太受欢迎的选择。

现在,在 Java 中使用 D3.js 最直接的方法是使用像selenium这样的重型工具来呈现一个虚拟的 HTML 页面并在其中执行 JavaScript。但这对我来说似乎有点矫枉过正。

有没有更简单的方法可以直接在同一个 Java 进程中执行这种 JavaScript?我问是因为 D3.js 旨在在 HTML 文档的上下文中工作。我不确定这是否可能与Rhino或其他 Java 脚本实现有关

4

3 回答 3

4

你可以使用phantom.js。它是一个基于 webkit 的无头浏览器,它允许您在不需要浏览器的情况下运行 JavaScript。

使用它,您可以执行一个系统调用来运行 phantom.js 用于您的 JavaScript 代码和输入。然后它将相应地创建您的输出。请参阅此示例

于 2012-07-04T14:39:21.453 回答
3

大约一年前,我从事过这项工作。我设法让部分 HighCharts(javascript 中的 SVG 图形)与 Rhino 一起工作。我不得不将 env.js 插入其中,并遇到了很多关于画布元素的问题,尤其是在边界框计算方面。Rhino 中的对象没有实现 getBBox(),它不容易被伪造。

我的目标是最终用 Batik 将其呈现为 PDF ......这花了太多时间,我们决定改用另一种技术。

所以,今天,我们使用wkhtmltopdf,它不是 Java,而是一个静态可执行文件,可以嵌入到 jar 中并从 java 端轻松启动。顺便说一句,如果你想渲染某些东西,xvfb 在 Linux 上是必需的。这和 PhantomJS 差不多

于 2012-07-04T15:15:41.070 回答
1

您可能想看看这些 d3 包装器:

  • javafx-d3

https://github.com/stefanidelloth/javafx-d3

  • gwt-d3:

https://github.com/gwtd3/gwt-d3

  • “自由代码图表和 D3 包装器”:

https://vaadin.com/directory#!addon/freecode-charts-and-d3-wrapper

于 2015-09-09T20:03:25.433 回答