2010-07-11 4 views
2

RPC 서비스가 있고 그 중 하나가 Pentaho Reporting Engine을 사용하여 보고서를 생성하고 있습니다. 보고서는 PDF 파일입니다. 내가하고 싶은 것은 사용자가 보고서를 요청할 때 보고서가 다시 그에게 보내지고 대화 상자 또는 sth 팝업이 저장됩니다. 나는 내 서비스 방법 안에서 이것을 시도했다 :GWT : 서버에서 클라이언트로 PDF 문서 보내기

Resource res = manager.createDirectly(new URL(reportUrl), MasterReport.class); 
      MasterReport report = (MasterReport) res.getResource(); 
      report.getParameterValues().put("journalName", "FooBar"); 
      this.getThreadLocalResponse().setContentType("application/pdf"); 
      PdfReportUtil.createPDF(report, this.getThreadLocalResponse().getOutputStream()); 

하지만 작동하지 않는다. 어떻게 할 수 있습니까?

답변

6

조금씩 다릅니다. PDF를 생성하는 데 사용하는 별도의 서블릿이 있습니다. 클라이언트에서 같은 수행

Cookies.setCookie(set what ever stuff PDF needs...); 
Window.open(GWT.getModuleBaseURL() + "DownloadPDF", "", ""); 

서블릿을 DownloadPDF이 같은 같습니다

public class DownloadPDF extends HttpServlet { 

public void doGet(HttpServletRequest request, HttpServletResponse response) { 
    Cookie[] cookies = request.getCookies(); 
    try { 
     // get cookies, generate PDF. 
     // If PDF is generated to to temp file, read it 
     byte[] bytes = getFile(name); 
    sendPDF(response, bytes, name); 
    } catch (Exception ex) { 
     // do something here 
    } 
} 

byte[] getFile(String filename) { 

    byte[] bytes = null; 

    try { 
     java.io.File file = new java.io.File(filename); 
     FileInputStream fis = new FileInputStream(file); 
     bytes = new byte[(int) file.length()]; 
     fis.read(bytes); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return bytes; 
} 

void sendPDF(HttpServletResponse response, byte[] bytes, String name) throws IOException { 
    ServletOutputStream stream = null; 

    stream = response.getOutputStream(); 
    response.setContentType("application/pdf"); 
    response.addHeader("Content-Type", "application/pdf"); 
    response.addHeader("Content-Disposition", "inline; filename=" + name); 
    response.setContentLength((int) bytes.length); 
    stream.write(bytes); 
    stream.close(); 
} 
} 
+0

작품을 완벽하게 :) GWT 클라이언트에서 – jjczopek

+0

@BJB 여기에 도착 바이트 어떻게 바이트 파일에 쓰기를, gwt가 그것을 지원하지 않습니다, 그렇죠? – Parvathy

관련 문제