2013-03-22 4 views
0

나는 pdf를 생성하는 웹 서비스가있다. 내 GAE 응용 프로그램에서 나는 버튼을 가지고 있는데, 클릭 할 때 아약스의 기능을 사용한다.ajax 응답을 pdf로 표시하는 방법은 무엇입니까?

방화범으로
@RequestMapping(method = RequestMethod.GET, value = PROVAWS_URL) 
public void prova(HttpServletRequest httpRequest, HttpServletResponse httpResponse, HttpSession httpSession) throws IOException{ 
    try { 
     URL url = new URL("http://XXXXX/sap/bc/zcl_getpdf/vbeln/yyyyyy"); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestProperty("Authorization","Basic " + Base64.encodeBase64String(("username:password").getBytes())); 
     connection.setConnectTimeout(60000); 
     if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
      // OK 
      ByteArrayOutputStream bais = new ByteArrayOutputStream(); 
      InputStream is = null; 
      try { 
       is = connection.getInputStream(); 
       byte[] byteChunk = new byte[4096]; 
       int n; 

       while ((n = is.read(byteChunk)) > 0) { 
       bais.write(byteChunk, 0, n); 
       } 
      } 
      catch (IOException e) { 

      } 
      finally { 
       if (is != null) { is.close(); } 
      } 
      httpResponse.setContentType("application/pdf"); 
      httpResponse.setHeader("content-disposition","attachment; filename=yyyyy.pdf");    
      httpResponse.getOutputStream().write(bais.toString().getBytes("UTF-8")); 
      httpResponse.getOutputStream().flush();   
     } 
.... 
} 

내가 repsonse를 참조하십시오 :

$('#test').click(function(){ 
     $.ajax({ 
      url: 'provaws.do', 
      type: 'get', 
      dataType: 'html', 
        success : function(data) { 
        } 
     }); 
    }); 

는 URL을 가져올 수를 사용하여, 통화 WS있어 자바의 방법 난에 아약스의 기능 설정이 필요가있는 무엇

%PDF-1.3 
%âãÏÓ 
2 0 obj 
<< 
/Type /FontDescriptor 
/Ascent 720 
/CapHeight 660 
/Descent -270 
/Flags 32 
/FontBBox [-177 -269 1123 866] 
/FontName /Helvetica-Bold 
/ItalicAngle 0 
.... 

PDF보기? 사전에

덕분에

+0

정상적인 http 요청이 아닌 왜 아약스 요청이 필요한가요? 당신은로드 된 DOM을 잃지 않도록 첨부 파일에 내용 처리를 설정하고 있습니다. – planetjones

+0

내 오류는 httpResponse.getOutputStream(). write (bais.toString(). getBytes ("UTF-8")); .. 그리고 나는 아약스에서 나갈거야 .. tks –

답변

0

나는 잘 자바 모르겠지만, 나의 이해에 메커니즘이 잘되지 않을 수 있습니다. 서버 측 코드 (JAVA)는 백엔드에서 PDF 파일 시스템에서 파일을 넣어 생성 한 다음에 파일의 URI를 반환해야합니다 대신 스트림에 파일을 전송의

: 여기

내 수정입니다 Ajax 응답.

Ajax 코드의 경우 서버에서 URL을 가져온 다음 DOM에 새 URL을 표시합니다. 그런 다음이 링크를 따라 PDF 읽기/다운로드를 수행 할 수 있습니다.

사이드 참고 :

나는 jQuery의 ajax()가 처리 할 수 ​​있지만, 아약스에 의해 스트리밍 데이터에 대한 방법이 있다는 것을 조사한다. 하지만 PDF 파일 렌더링의 경우 스트리밍이 과도하다고 생각합니다. 참조 : jquery ajax, read the stream incrementally?, http://ajaxpatterns.org/HTTP_Streaming#In_A_Blink *

관련 문제