Java PhantomJS从Jersey rest服务启动时返回黑色屏幕截图
当我启动Java PhantomJS从Jersey rest服务启动时返回黑色屏幕截图,java,jersey,tomcat7,phantomjs,jersey-2.0,Java,Jersey,Tomcat7,Phantomjs,Jersey 2.0,当我启动service.snapshot(msg)时不是来自Jersey资源,那么它工作正常。但是对于下面的代码,它会生成空白的png/pdf文件 @GET @Path("/snapshot") @Produces(MediaType.APPLICATION_JSON) public RequestResponse snapshot( @QueryParam("url") String url, // snapshot(...)
service.snapshot(msg)时代码>不是来自Jersey资源,那么它工作正常。但是对于下面的代码,它会生成空白的png/pdf文件
@GET
@Path("/snapshot")
@Produces(MediaType.APPLICATION_JSON)
public RequestResponse snapshot( @QueryParam("url") String url, // snapshot(...)
@QueryParam("format") String format,
@QueryParam("quality") int quality) throws InterruptedException {
final PageSnapshotMsg msg = new PageSnapshotMsg.Builder().url(url).
format(format).
quality(quality).
build();
return service.snapshot(msg);
}
生成的PhatomJS脚本相同:
我想知道可能是什么
更新:
我试图让我的PhantomJS脚本看起来像这样(添加了延迟2000),但没有帮助:
var page = require('webpage').create();
page.viewportSize = { width: 800, height: 600 };
page.open('bl.ocks.org/mbostock/4063550', function(status) {just_wait(); });
function just_wait() {
setTimeout(function() page.render('c:/snapshots_db/1406931931354_bl_ocks_org_mbostock_4063550.png', {format: 'png', quality: '10'});
phantom.exit();}, 2000);}
尝试添加一个延迟,然后拍摄屏幕截图。在page.render()之前,它有助于在呈现页面之前实际加载页面。曾经帮助过我。如果有任何希望,请发邮件
否则,请尝试检查保存图像的目录的写入权限(对于应用程序)以及页面url是否可用
可能有关联
还请检查其他相关主题。您打开的URL必须是正确的URL。它必须以http://
或https://开头。否则什么也不会发生
您应该检查status
参数以获得提示
var page = require('webpage').create();
page.open('http://example.com/', function(status){
console.log(1, status); // success
page.open('example.com/', function(status){
console.log(2, status); // fail
phantom.exit();
});
});
我增加了延迟。到目前为止没有帮助(请参阅更新)。我不是想在chrome中显示png/svg,而是让PhantomJs将图像存储到文件夹中。而且它可以工作,但不能从tomcat/jersey。此外,在编辑过程中,您忘记了要打开的url中的
http://
。这是必要的。@ArtjomB。这正是原因。缺少“http://”。无论我传递了什么错误的url,PhatnomJs都会返回0(成功代码),如果url是错误的,我预期会有其他结果。我想我应该使用这个示例来构建退出代码:(将代码作为参数传递给phantom.exit()函数)@ses您只能返回退出代码。所以只有整数才能工作。根据您调用它的方式,您还可以向控制台写入内容并从java读取,甚至可能对JSON进行编码和解码。现在,我决定检查url是否存在于java,而不是启动/依赖phantomjs进程/脚本(因为这需要花费大量时间)。若url不存在,那个么就不需要启动phantomjs进程。但这已经是细节了。。