4

I have an HTML page that has Javascript code. It needs to be rendered first before it can be converted into an image.

I am aware of projects like wkhtmltoimage, PhantomJS, khtmltopng, webkit2png, PrinceXML and html2image. I have implemented a few of those but I am trying to find a pure Java solution that does not have to use Process to execute a command. Any help would be great, thanks!

edit: I looked into Cobra however it seems that the JS support is still in dev and it does not parse my html file properly.

Or if there are any other ways of doing this, please let me know. I am just trying to find the best solution possible.

4

2 回答 2

1

我找到了使用WebRenderer的解决方案。WebRenderer 是一个付费解决方案,有 Swing、服务器和桌面版。自 2012 年 7 月 9 日起,swing 版本是唯一支持 HTML5 的版本。但是,可以在服务器上使用 swing 版本通过实例化浏览器而不是创建 JFrame 来转换图像。看到这个问题

于 2012-07-09T18:31:55.590 回答
1

没有纯 Java 解决方案 - 没有人用 Java 编写过支持 HTML 5 的浏览器。

我会尝试以下任何一种方法:

  1. 使用env.js+ rhino模拟可以运行 JavaScript 的浏览器。例如,这应该会给你一个 DOM,你可以使用FlyingSaucer来渲染它。

  2. 将 SWT 添加到您的类路径(加上您平台的二进制文件)。它包含一个Browser使用系统浏览器呈现 URL 或 HTML 字符串的组件。

您可能需要SWTBot以无头模式运行浏览器。

如果这不起作用并且您在 Linux 上,那么您可以启动一个内存 X 服务器Xvfb来打开您的浏览器。或者您可以使用vncserver在您的服务器上启动一个桌面。

[编辑] phantomjs项目可能会做你想做的事:

PhantomJS (www.phantomjs.org) 是一个可使用 JavaScript 或 CoffeeScript 编写脚本的无头 WebKit。
[...]
用例:无头 Web 测试、站点抓取、页面渲染
多平台,可在主要操作系统上使用:Windows、Mac OS X、Linux、其他 Unices
Web 标准的快速本地实现:DOM、CSS、JavaScript、Canvas , SVG。没有仿真!
Linux 上的纯无头 (X11),非常适合持续集成系统。也在 Amazon EC2 上运行。

快速入门页面解释了如何加载网页并将其呈现为图像。

于 2012-06-19T19:52:15.917 回答