2012-07-11 87 views
0

如何閱讀本地PDF文件並將其作爲iText在瀏覽器中下載? 這是我試過的,但文件總是這樣說的:閱讀PDF文件並以iText作爲下載文件提供

Adob​​e Reader無法打開「xxx.pdf」,因爲它不是支持的文件類型,或者是因爲文件已損壞(例如,它已發送作爲電子郵件的附件,並沒有正確解碼)。

PdfReader reader = new PdfReader(filename); 
byte[] streamBytes = reader.getPageContent(1); 

response.setContentType("application/force-download"); 
response.setCharacterEncoding("UTF-8"); 
response.addHeader("Content-Disposition", "attachment; filename=" + filename); 

BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); 

bos.write(reader.getPageContent(1)); 
bos.write(streamBytes); 
bos.flush(); 
bos.close(); 

我甚至做了一個試驗,如果iText的文件識別爲PDF格式,這是輸出:

System.out.println("PDF Version: " + reader.getPdfVersion()); 
System.out.println("Number of pages: " + reader.getNumberOfPages()); 
System.out.println("File length: " + reader.getFileLength()); 
System.out.println("Encrypted? " + reader.isEncrypted()); 
System.out.println("Rebuilt? " + reader.isRebuilt()); 

14:52:42,121 INFO [STDOUT] PDF Version: 4 
14:52:42,121 INFO [STDOUT] Number of pages: 2 
14:52:42,121 INFO [STDOUT] File length: 186637 
14:52:42,121 INFO [STDOUT] Encrypted? false 
14:52:42,121 INFO [STDOUT] Rebuilt? false 

回答

1

內容類型應該是 「應用程序/ PDF」

response.setContentType("application/pdf"); 

編輯:你不必使用PdfReader,因爲你沒有修改pdf,你想要做這樣的事情:

   FileInputStream baos = new FileInputStream("c:\\temp\\test.pdf"); 

      response.setHeader("Expires", "0"); 
      response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); 
      response.setHeader("Pragma", "public"); 
      response.setContentType("application/pdf"); 
      response.addHeader("Content-Disposition", "attachment; filename=test.pdf"); 

      OutputStream os = response.getOutputStream(); 

      byte buffer[] = new byte[8192]; 
      int bytesRead; 

      while ((bytesRead = baos.read(buffer)) != -1) { 
       os.write(buffer, 0, bytesRead); 
      } 

      os.flush(); 
      os.close(); 
+0

你說得對,但它沒有解決任何問題。 – doonot 2012-07-11 13:08:19