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进程。但这已经是细节了。。