2009-12-21 135 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”})',然后尝试'