2011-11-08 129 views
1

我想從jsp打開一個PDF文件。 jsp和PDF位於相同的目錄中。 我使用下面的代碼塊:如何從java打開pdf文件?

if (Desktop.isSupported()) { 
    try { 
     File myFile = new File("<file name>.pdf"); 
     Desktop.getDesktop().open(myFile); 
    } catch (IOException ex) { 
     // no application registered for PDFs 
    } 
} 

不過,我得到該文件未發現的錯誤。 已驗證的user.dir,它指向我的tomcat/bin。 我如何參考pdf來打開它?

+0

得到了這個問題的代碼http://stackoverflow.com/questions/2546968/open-pdf-file-on-fly-from-java-application/2547004#2547004 – user811433

+0

上面的代碼將打開服務器上的PDF如果桌面是可用的,你應該使用正向或從jsp重定向到pdf來暴露給用戶 – gertas

+0

gertas,你能給我一個代碼示例來做到這一點嗎? – user811433

回答

4

您需要指定絕對文件路徑。假設有一個在公共web內容的根filename.pdf,這應該這樣做:

File myFile = new File(getServletContext().getRealPath("/filename.pdf")); 

然而,這種結構將無法正常工作,你所希望的方式。它將在web服務器機器中顯示PDF文件,而不是在webbrowser機器中顯示!只有當您碰巧運行網絡服務器和網頁瀏覽器物理上相同的機器,這將「工作」。但是,當你將webapp發佈到互聯網上時,webserver和webbrowser在物理上不同的機器上運行時,這顯然不會發生在現實世界中。

相反,您只需直接鏈接到PDF文件即可。

<a href="filename.pdf">View PDF</a> 

並讓瀏覽器處理顯示。

+0

我使用HTML方式工作。但是,我真的想知道如何使它從java/jsp工作。 – user811433

+2

您確實需要認識到Java/JSP代碼在web服務器中運行,而不是在webbrowser中運行。所有瀏覽器運行的都是由Java/JSP生成併發送的HTML/CSS/JS。如果您想在webbrowser中運行Java代碼,您需要創建一個[applet](http://download.oracle.com/javase/tutorial/deployment/applet/index.html)並將其嵌入爲''在HTML頁面。然而,如果你想要向客戶端顯示一個PDF文件,這是非常笨拙的。 – BalusC

0

你試過嗎?我剛剛從谷歌得到這個,所以我不知道它是否會工作。

Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler c:\\Java- Interview.pdf"); 
     p.waitFor();