2011-04-21 168 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