我有一个包含Javascript代码的HTML页面。它需要首先渲染才能转换为图像。
我知道像wkhtmltoimage,PhantomJS,khtmltopng,webkit2png,PrinceXML和html2image这样的项目。我已经实现了其中的一些,但我试图找到一个纯Java解决方案,不必使用Process来执行命令。任何帮助都会很棒,谢谢!
编辑:我查看了Cobra,但似乎JS支持仍在开发中,并且它不能正确解析我的html文件。
或者如果有其他方法可以这样做,请告诉我。我只是想找到最好的解决方案。
答案 0 :(得分:1)
没有纯Java解决方案 - 没有人用Java编写支持HTML 5的浏览器。
我会尝试其中任何一种方法:
使用env.js
+ rhino来模拟可以运行JavaScript的浏览器。这应该为您提供一个DOM,您可以使用FlyingSaucer进行渲染,例如。
将SWT添加到您的类路径(加上您的平台的二进制文件)。它包含Browser
组件,该组件使用您系统的浏览器render URLs or an HTML string。
您可能需要SWTBot才能以无头模式运行浏览器。
如果这不起作用且你在Linux上,那么你可以启动一个内存中的X服务器Xvfb
来打开你的浏览器。或者,您可以使用vncserver
在服务器上启动桌面。
[编辑] project phantomjs可能会做你想做的事:
PhantomJS(www.phantomjs.org)是一款使用JavaScript或CoffeeScript的无头WebKit脚本。
[...]
使用案例:无头网络测试,网站抓取,页面渲染
多平台,可在主要操作系统上使用:Windows,Mac OS X,Linux,其他Unices
Web标准的快速和原生实现:DOM,CSS,JavaScript,Canvas,SVG。没有效仿!
Linux上的纯无头(X11),是持续集成系统的理想选择。也可以在Amazon EC2上运行。
quickstart page解释了如何加载网页并将其渲染为图像。
答案 1 :(得分:1)
我找到了使用WebRenderer的解决方案。 WebRenderer是一种付费解决方案,具有swing,server和desktop版本。自2012年7月9日起,swing版是唯一支持HTML5的版本。但是,swing版本可以在服务器上使用,通过实例化浏览器而不是创建JFrame来转换图像。请参阅this question。