2014-11-28 6 views
0

JSP 페이지의 버튼 OnClick은 자바 코드를 사용하여 하나 이상의 PDF를 다운로드하려고하는데 할 수 없으며 다음 코드 조각을 동일하게 사용하려고합니다Java에서 다중 .PDF 파일을 다운로드하는 방법

 Document document[]= new Document[20]; 
      httpServletResponse.setHeader("Content-Disposition", 
       "attachment;filename=welcome.pdf"); 
       httpServletResponse.setContentType("application/pdf"); 
       try{ 
        for(int i=0;i<3;i++) 
        { 
        System.out.println(i); 
        document[i]=new Document(); 
        PdfWriter.getInstance(document[i], httpServletResponse.getOutputStream()); 
        document[i].open(); 
        document[i].add(new Paragraph("Hello Prakash")); 
        document[i].add(new Paragraph(new Date().toString())); 
        document[i].close(); 
        } 
        }catch(Exception e){ 
        e.printStackTrace(); 
       } 

작동하지 않고 항상 하나의 .PDF 파일 만 다운로드 중이므로 아무도 도와 줄 수 없습니까?

+4

단일 요청으로 여러 파일을 다운로드 할 수 없습니다. 해결 방법은 zip 파일에 넣는 것입니다. – Thilo

+0

이미 모든 PDF 파일이 포함 된 zip 파일을 사용하여이 작업을 수행했습니다 – Anarki

+0

sry, 제 요구 사항을 하나씩 다운로드해야합니다 – eagle

답변

0

PDF를 다운로드 할 때마다 서버에 여러 요청을하는 페이지를 준비 할 수 있습니다. 이것은 사용자 경험이 그렇게 좋지 않습니다. 당신은 ZIP 다운로드를 사용할 수 없습니다

response.setContentType("application/zip"); // application/octet-stream 
response.setHeader("Content-Disposition", "inline; filename=\"all.zip\""); 
try (ZipOutputStream zos = new ZipOutputStream(response.getOutputStream())) { 
    for (int i = 0; i < 3; i++) { 
     ZipEntry ze = new ZipEntry("document-" + i + ".pdf"); 
     zos.putNextEntry(ze); 

     // It would be nice to write the PDF immediately to zos. 
     // However then you must take care to not close the PDF (and zos), 
     // but just flush (= write all buffered). 
     //PdfWriter pw = PdfWriter.getInstance(document[i], zos); 
     //... 
     //pw.flush(); // Not closing pw/zos 

     // Or write the PDF to memory: 
     ByteArrayOutputStream baos = new ... 
     PdfWriter pw = PdfWriter.getInstance(document[i], baos); 
     ... 
     pw.close(); 
     byte[] bytes = baos.toByteArray(); 
     zos.write(baos, 0, baos.length); 

     zos.closeEntry(); 
    } 
} 

그냥 읽어

나는 모든 PDF 파일을 포함하는 zip 파일을 사용합니다.

더 나은 다운로드 환경을 제공하는 HTML5를 사용할 수 있습니다 (진행 막대?).

+0

감사합니다 joop,하지만 귀하의 코드를 이해할 수없는 정확한 코드를 제공 할 수 있습니다 – eagle

+0

두 번째 대안을 선택하는 코드를 만들었습니다 : ByteArrayOutputStream에 PDF를 작성하여 쓸 파일 내용의'byte []'를 얻습니다 지퍼에. // try-with-resources는 Java 7 용입니다. 그렇지 않으면, 마지막에'zos.close()'를 호출해야합니다. –

+0

joop ,, 내가이 PdfWriter의 코드를 할 때마다 pw = PdfWriter.getInstance (document [i], baos); 여기에 문서가 "형식의 형식이 배열 형식이어야하지만 Document로 해결되었습니다"와 같은 오류가 발생합니다. 어떻게 해결할 수 있습니까? – eagle

관련 문제