有没有人能帮我在JSF页面中仅通过iframe显示PDF文档?
提前感谢,
Suresh
只需按照通常的方式使用 <iframe>
标签:
<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>
在这篇文章中,您可以找到一个类似的Servlet的完整示例。
在JSF中,<iframe>
同样可以正常工作,假设您使用的是JSF 1.2或更新版本。在JSF 1.1或更早版本中,您必须将纯HTML元素(例如<iframe>
)包装在<f:verbatim>
中,以便它们被视为JSF组件树的一部分,否则它们会在输出中错位:
<f:verbatim><iframe src="/path/to/servlet/file.pdf"></iframe></f:verbatim>
@WebServlet(name="pdfHandler", urlPatterns={"/pdfHandler"})
,然后尝试使用<iframe src="/pdfHandler/file.pdf"></iframe>
,但是servlet没有被调用。很奇怪。BalusC,你有什么想法吗? - Thang Pham/pdfHandler/*
,才能接受带有额外路径信息而不是请求参数的URL。 - BalusCrequest.getPathInfo()
来获取文件名。我在Web浏览器上运行Servlet,像这样http://localhost:8080/MyNote-war/pdfHandler
,然后我的路径返回null
,这是正确的,但是如果我附加文件名,Servlet就不再调用了。因此,像这样http://localhost:8080/MyNote-war/pdfHandler/file.pdf
,我得到了the requested resource is not available
。有什么想法,BalusC? - Thang Pham/pdfHandler/*
。你注意到我之前评论中的编辑了吗? - BalusCsrc="/pdfHandler/file.pdf#zoom=50"
表示50%缩放。您可以在此处找到所有这些参数。请注意,您以这种方式依赖于插件。 - BalusC我建议您查看http://www.jpedal.org/。您可以将每个PDF页面转换为图像,并将它们分别传递到浏览器。
这种方法对于您的应用程序更加安全,因为PDF永远不会发送到客户端。