我想捕獲當前頁面並將其發送到將其轉換爲pdf的應用程序。在java web中捕獲當前頁面內容
這是我在用的:
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是登錄電子錯誤頁面。
有沒有辦法捕捉使用當前用戶會話的頁面內容?
預先感謝您。
Hi @BalusC,我們的webapp支持URL重寫。我嘗試了你的第一個建議,但我仍然得到錯誤登錄頁面。該Web應用程序使用Seam身份驗證和王子(我用來打印PDF的應用程序)是我的Windows機器上的安裝。有沒有辦法通過登錄或將新的urlconnection綁定到已驗證的會話。謝謝 –
我不熟悉Seam身份驗證,所以我不能詳細介紹,但理論上很可能需要額外的請求Cookie。我會監視您的普通網頁瀏覽器(按Chrome/IE10/Firebug中的F12,並檢查「網絡」/「網絡」部分)和網絡服務器之間的HTTP流量,以查看請求標頭中是否沒有其他Cookie。如果是這樣,那麼你應該在你的程序化請求中模擬相同的cookie。 – BalusC
,在瀏覽器上(清除緩存並再次登錄後),我只有一個jsessionid cookie並且會話存儲爲空。在tomcat管理器中,Active HttpSessions信息下,活動會話具有列名:會話ID,猜測區域,猜測用戶名,創建時間,上次訪問時間,使用時間,非活動時間和TTL。 –