2013-07-17 50 views
1

我需要將某些數據轉換爲pdf文件。爲此,我有以下代碼將保存TablePdf.pdf中的數據在服務器中。 (這裏的pdf文件保存在C:\目錄下)從服務器下載PDF文件

public String generatePdf() throws Exception 
{ 
Font font = FontFactory.getFont("Ms Dialog Light"); 
BaseFont pdfFont = font.getBaseFont(); 

// TODO Auto-generated method stub 
HashMap inputMap = new HashMap(); 

inputMap.put(TableProperties.PDF_PATH, "c://TablePdf.pdf"); 
inputMap.put(TableProperties.PDF_TABLE_NAME, "Table"); 

inputMap.put(TableProperties.PDF_HEIGHT, "1000"); 
inputMap.put(TableProperties.PDF_WIDTH, "1500"); 

ArrayList<String> columnNameList = new ArrayList<String>(); 
ArrayList<String> dataList = new ArrayList<String>(); 
ArrayList<String> columnWidthList = new ArrayList<String>(); 

columnNameList.add("Col1"); 
columnNameList.add("Col2"); 
columnNameList.add("Col3"); 
columnNameList.add("Col4"); 
columnNameList.add("Col5"); 

columnWidthList.add("1"); 
columnWidthList.add("2"); 
columnWidthList.add("2"); 
columnWidthList.add("3"); 
columnWidthList.add("1"); 

for (int i = 0; i < 9; i++) 
    { 
    dataList.add("Id" + i); 
    dataList.add("Name is = " + Math.random() * i); 
    dataList.add("Field Value1 is = " + Math.random() * i); 
    dataList.add("Field Value2 is = " + Math.random() * i); 
    dataList.add("Field Value3 is = " + Math.random() * i); 
    } 

inputMap.put(TableProperties.PDF_TABLE_COLUMN_NUMBER, "5"); 
inputMap.put(TableProperties.PDF_TABLE_COLUMN_NAME, columnNameList); 
inputMap.put(TableProperties.PDF_TABLE_COLUMN_VALUES, dataList); 

inputMap.put(TableProperties.PDF_TABLE_HEADER_WIDTH, columnWidthList); 

inputMap.put(TableProperties.PDF_HEADER, "   Hello\n\n"); 
inputMap.put(TableProperties.PDF_HEADER_FONT_NAME, pdfFont); 
inputMap.put(TableProperties.PDF_HEADER_FONT_SIZE, "20.0"); 
inputMap.put(TableProperties.PDF_HEADER_ALIGNMENT, Element.ALIGN_LEFT); 

inputMap.put(TableProperties.PDF_FOOTER, "    Tata"); 
inputMap.put(TableProperties.PDF_FOOTER_FONT_NAME, pdfFont); 
inputMap.put(TableProperties.PDF_FOOTER_FONT_SIZE, "9.0"); 
inputMap.put(TableProperties.PDF_FOOTER_ALIGNMENT, Element.ALIGN_RIGHT); 

inputMap.put(TableProperties.PDF_TABLE_CELL_HEIGHT, "6.0"); 
inputMap.put(TableProperties.PDF_TABLE_HEADER_HEIGHT, "4.0"); 

inputMap.put(TableProperties.PDF_TABLE_ALTERNATE_BACKGROUND_COLOR, "Y"); 
inputMap.put(TableProperties.PDF_TABLE_BACKGROUND_COLOR, BaseColor.CYAN); 
inputMap.put(TableProperties.PDF_TABLE_CELL_ALIGNMENT, new Integer(Element.ALIGN_LEFT)); 
inputMap.put(TableProperties.PDF_TABLE_FONT_NAME, pdfFont); 
inputMap.put(TableProperties.PDF_TABLE_FONT_SIZE, "6.0"); 
inputMap.put(TableProperties.PDF_TABLE_HEADER_ALIGNMENT, new Integer(Element.ALIGN_CENTER)); 
inputMap.put(TableProperties.PDF_TABLE_HEADER_BACKGROUND_COLOR, BaseColor.GRAY); 

inputMap.put(TableProperties.PDF_TABLE_HEADER_FONT_NAME, FontFactory.getFont("Times-Roman").getBaseFont()); 
inputMap.put(TableProperties.PDF_TABLE_HEADER_FONT_SIZE, "6.0"); 

CreateTable crtTbl = new CreateTable(); 
    crtTbl.createTable(inputMap); 
} 

現在我需要允許客戶端,以便他們可以下載PDF文件。

-------------------- EDITED ------------------------- -------

下面是我的jsp代碼下載pdf文件。它在控制檯中沒有提供任何錯誤,但文件沒有下載。

<%@ page import="java.util.*,java.io.*"%> 
<%@ page language="java"%> 

<% 
    try 
    { 

     response.setContentType ("application/pdf");  
     //set the header and also the Name by which user will be prompted to save 
     response.setHeader ("Content-Disposition", "attachment;filename=TablePdf.pdf"); 

     File f = new File ("C:\\TablePdf.pdf"); 

     InputStream inputStream = new FileInputStream(f); 
     ServletOutputStream servletOutputStream = response.getOutputStream(); 
     int bit = 256; 
     int i = 0; 
     try 
     { 

      while ((bit) >= 0) 
      { 
       bit = inputStream.read(); 
       servletOutputStream.write(bit); 
      } 
      System.out.println("" +bit); 


      } 
      catch (Exception ioe) 
      { 
       ioe.printStackTrace(System.out); 
      } 
      servletOutputStream.flush(); 
      //outs.close(); 
      inputStream.close();  
    } 
    catch(Exception e) 
    { 

    } 

%> 
+0

什麼是您的服務器和什麼可能是客戶端?順便說一句,你在這裏發佈的洞代碼與回答這個問題無關。 – A4L

回答

2

有很多選擇。其中兩個:

  • 安裝一個簡單的Apache服務器 - 你的PDF文件存儲下的htdocs,他們將訪問
  • 已經在使用Tomcat(或其他servlet容器),使一個servlet從讀取文件他們被存儲的目錄並且流他們下載。總之,這是通過將它們的字節從FileInputStream轉移到response.getOutputStream()來完成的。還相應地設置Content-Disposition標頭
+0

搜索了很多,但無法找到文件下載的工作示例。我正在使用tomcat。 – user2551629

+2

http://stackoverflow.com/a/14281064/203907 – Bozho

+0

PLZ看看我在編輯部分的問題。 – user2551629