1

我想捕获当前页面并将其发送到将其转换为 pdf 的应用程序。

这就是我正在使用的:

FacesContext facesContext=FacesContext.getCurrentInstance();


       HttpServletResponse response = (HttpServletResponse)
facesContext.getExternalContext().getResponse();
       HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
//        RequestPrinter.debugString();
       response.reset();
    // download a pdf file
       response.setContentType("application/pdf");
        response.setHeader("Content-Disposition","attachment;filename="+new Date().toString()+".pdf");
         prince.setVerbose(true);
        prince.setLog(logFile);

            try{


                //getPath() to the page the user is currently on
                URL pagePath=new URL(this.getPath());
                URLConnection urlConnection = pagePath.openConnection();

                urlConnection.setDoOutput(true);

                int length = urlConnection.getContentLength();

                //Lets use inputStream
                BufferedInputStream bis=new BufferedInputStream(urlConnection.getInputStream());
                response.setContentLength(length);
                //this.getPageUsingJSoup().data().getBytes();
                //call prince and pass params for inputstream  outputStream

                prince.convert(bis,response.getOutputStream());
                urlConnection.getInputStream().close();

            }catch(MalformedURLException mu){

                mu.printStackTrace();
            }
            catch(IOException ioe){
            ioe.printStackTrace();
            }

   facesContext.responseComplete();

由于网站需要认证,所以生成的pdf就是登录错误页面。

有没有办法捕获使用当前用户会话的页面内容?

先感谢您。

4

4 回答 4

3

只需在与当前请求相同的 HTTP 会话中请求页面即可。如果您的 web 应用程序支持 URL 重写(默认情况下),那么只需将会话 ID 附加为jsessionid路径片段:

String sessionId = ((HttpSession) externalContext.getSession()).getId();
InputStream input = new URL("http://localhost:8080/context/page.jsf;jsessionid=" + sessionId).openStream();
// ...

或者,如果您的 webapp 不接受 URL 重写,但只接受 cookie,则以通常的方式将其设置为请求 cookie:

URLConnection connection = new URL("http://localhost:8080/context/page.jsf").openConnection();
connection.setRequestProperty("Cookie", "JSESSIONID=" + sessionId);
InputStream input = connection.getInputStream();
// ...

请注意,我删除了setDoOutput()因为您似乎对执行 POST 请求不感兴趣。

于 2013-07-29T16:41:38.583 回答
0

Yes of course there is. You are sending this content, so you have it. You should store the Content Object. If you dont have it, inspect your byte streams. The content should be there ;)

于 2013-07-29T14:05:00.030 回答
0

有几个网站允许您将整个页面转换为 pdf 并将其保存为 .pdf 文件。试试这个网站http://pdfcrowd.com/希望这对你有帮助。

于 2013-07-29T16:02:59.340 回答
0

我不知道如何使用当前用户的会话来捕获页面的内容,但我可以建议另一种方法 - 您可以将 pdf 转换逻辑移动到 Selenium 测试用例中,并使用测试用例导航和登录到需要认证的页面。自动tc登录后,您可以调用您的pdf转换逻辑...?

于 2013-07-29T14:00:10.273 回答