2011-04-21 131 views
1

我想在我的JSF页面上显示PDF文件,我检查了这个how to display a pdf document in jsf page in iFrame,但我不想在iframe上显示它(因为它会生成滚动条)。我只想将pdf显示在一个像图像这样的页面上,并且可以给它一个宽度和高度。如何在JSF页面上显示PDF

EDIT Hi BalusC。我仍然无法在联机中显示PDF。这是我的代码。

@WebServlet(name = "pdfHandler", urlPatterns = {"/pdfHandler/*"}) 
public class pdfHandler extends HttpServlet { 

    private static final int DEFAULT_BUFFER_SIZE = 10240; 

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     String requestedFile = request.getPathInfo(); 
     File file = new File("/Users/KingdomHeart/Downloads/Test/pdf/" + requestedFile); 
     response.reset(); 
     response.setContentType("application/pdf"); 
     response.setBufferSize(DEFAULT_BUFFER_SIZE); 
     response.setHeader("Content-Length", String.valueOf(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{ 
      output.close(); 
      input.close(); 
     } 
    } 
    ... 
} 

它仍然提示我下载pdf文件。下载到我的电脑的PDF文件是正确的PDF文件btw。你能发现任何错误吗?

+0

首先,检查您的浏览器中是否安装了Adobe Reader插件**。您可以在浏览器中查看PDF文档**,还是要求下载? – 2011-04-21 17:28:11

回答

4

这里没有真正的另一种方式(期望从HTML <object>标签,它也有同样的“问题”),但你可以给固定的大小和禁用滚动如下:

<iframe src="foo.pdf" width="600" height="400" scrolling="no"></iframe> 

如果您还想隐藏(默认)边框,并添加frameBorder="0"

+0

当我在iframe中显示时,它不显示PDF,它立即提示我下载PDF文件。转换pdf - >图像是唯一的解决方案吗? – 2011-04-21 15:52:31

+3

'Content-Disposition'响应头必须设置为'inline'(默认)而不是'attachment'。另请参阅您为代码行链接的答案。 – BalusC 2011-04-21 15:53:18

+1

根据您的更新:那么这是一个浏览器设置,它被迫在任何检索时保存PDF。你使用Firefox吗? *工具>选项>应用程序*。请注意,默认情况下不会这样做,您必须在获取PDF文件时勾选了某个* remember *选项。 – BalusC 2011-04-21 17:12:24

1

尝试进入Adobe Reader,然后在选项对话框中有网页设置,您可以在其中指示您始终希望在浏览器中打开PDF类型的文档。

这不幸是一个客户端修补程序,并没有考虑到其他PDF阅读器。

1

你想要什么是不可能的。浏览器并不神奇,只是显示不同类型的文档,其中一些(HTML)可以将插件(flash,java)和其他文档提供的对象嵌入iframe(pdf,flash,html)中。如果你想显示pdf缩图,你将不得不在服务器上生成图像。

+0

谢谢。有关将PDF转换为图像的Java开放源代码API的任何建议? – 2011-04-21 17:21:04

+0

http://java.net/projects/pdf-renderer/(来自SwingLabs)的PDF渲染器库用于运行良好(尽管我从来没有用它来制作大拇指,但它应该可以工作)。 – fdreger 2011-04-21 17:29:44

+0

你在哪里下载可执行文件,jar文件?我看到的只是源代码。 – 2011-04-21 18:40:25

2

您应该看看ICEpdf,它会在服务器端创建一个图像,提供缩放和其他控件(demo)。

+0

你以前用过这个库吗? – 2011-04-22 02:16:52

+0

不支持servlet部分,只与图像转换有关,但如果您下载发行版本,则具有JSF(ICEfaces)web应用程序示例。 – Adam 2011-04-22 07:54:37