2013-07-17 2 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, и они будут доступны
  • У кота (или другой контейнер сервлетов), и сделать сервлет, который считывает файлы из каталог, который они хранят, и передает их для загрузки. Короче говоря, это делается путем передачи их байтов из FileInputStream в response.getOutputStream(). Также установите заголовок Content-Disposition` соответственно
+0

Искал много, но не смог найти рабочий пример для загрузки файлов. Я использую tomcat. – user2551629

+2

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

+0

PLZ Посмотрите на мою отредактированную часть в вопросе. – user2551629

Смежные вопросы