2009-12-21 137 views
3

任何人都可以幫助我在iframe中的JSF頁面中顯示PDF文檔嗎?如何在iFrame的jsf頁面中顯示pdf文檔

由於提前,

蘇雷什

+0

那麼,jsp還是jsf? – Bozho 2009-12-21 12:14:00

+0

以及您想在哪裏顯示它 - 在新窗口中,還是在iframe中? – Bozho 2009-12-21 12:15:08

+0

相關:http://stackoverflow.com/questions/1776142/getoutputstream-has-already-been-called-for-this-response – skaffman 2009-12-21 12:15:50

回答

8

只需使用通常的方式:

<iframe src="/path/to/file.pdf"></iframe> 

如果你的問題是相當的PDF不地處WebContent,而是位於某處否則在磁盤文件系統或甚至在數據庫中,那麼你基本上需要一個Servlet,它得到它的InputStream,並將它寫入響應的OutputStream

response.reset(); 
response.setContentType("application/pdf"); 
response.setContentLength(file.length()); 
response.setHeader("Content-disposition", "inline; filename=\"" + file.getName() + "\""); 
BufferedInputStream input = null; 
BufferedOutputStream output = null; 

try { 
    input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE); 
    output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE); 

    byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 
    int length; 
    while ((length = input.read(buffer)) > 0) { 
     output.write(buffer, 0, length); 
    } 
} finally { 
    close(output); 
    close(input); 
} 

這種方式可以只指向這個servlet,而不是:)例如爲:

<iframe src="/path/to/servlet/file.pdf"></iframe> 

你可以找到this article類似的servlet的一個完整的例子。

也適用於JSF,假設您使用的是JSF 1.2或更新的版本。在JSF 1.1或以上,你必須包裝普通的香草HTML元素,如一個<f:verbatim>使他們必須考慮到JSF組件樹裏面,否則他們將在輸出脫臼:

<f:verbatim><iframe src="/path/to/servlet/file.pdf"></iframe></f:verbatim> 
+0

糾正我,如果我錯了,你不必註冊servlet內的web.xml任何servlet 3.0,正確嗎?我做了這個'@WebServlet(name =「pdfHandler」,urlPatterns = {「/ pdfHandler」})',然後嘗試'