2014-09-10 3 views
2

Javascript를 사용하여 PDF 파일의 바이트 스트림을 새 창에서 팝업하려고합니다. 이 게시물이 방법은 크롬 개발자 도구에서이새 브라우저 창에서 PDF bytestream이 응답으로 표시됩니다.

$.ajax({ 
    url: url, 
    cache: false, 
    type:'POST', 
    data: JSON.stringify(data), 
    contentType:"application/json; charset=UTF-8", 
    success: function (responseData){ 
     var win=window.open('about:blank', target, windowProperties); 
     with(win.document) 
     { 
      open(); 
      write(responseData); 
      close(); 
     } 
    } 
}); 

같은 JS에서 AJAX 호출에 의해 호출되는

@RequestMapping(value = "/print", method = RequestMethod.POST, consumes="application/json") 
public ModelAndView printCompareChart(@RequestBody ChartGenerationRequest request, 
     HttpServletRequest httpRequest) throws Exception { 

    byte [] bytes =//bytestream of a pdf file 
    ModelAndView mav = new ModelAndView(); 
    mav.addObject("byteArray", bytes); 
    mav.setViewName("pdfByteArrayPrint"); 
    return mav; 
} 

아래에 주어진 백엔드에서

나는 봄 컨트롤러 코드를 사용하고 응답 데이터가 바이트로 표시되지만 새 브라우저 창에는 실제 PDF 파일이 표시되지 않지만 바이트 자체는 표시됩니다. 내가 바이트 스트림에서 추출 여기에 실제 파일을 표시 할 수 있습니다 방법

나는

output window

를 출력 얻고있다?

+0

내가 JSON 데이터의 전송 스트림 –

+0

로 PDF 파일을 다시 얻고있다'HTML 문서가 win.document'. 당신이 쓴 것은 중요하지 않습니다. – zeroflagL

답변

0

전혀 작동하지 않습니다. 그래서 나는 이것에 대한 대안을 생각해 냈습니다. JS 측에서 숨겨진 양식을 만들고 데이터로 제출 한 후 백엔드는 pdf bytestream으로 응답했으며 새 브라우저 창에 표시되었습니다. 이 경우 자바 객체에 대한 자동 json 변환을 희생하고 전달 된 httpRequest에서 개별적으로 각 매개 변수를 처리해야했습니다.

JS 코드

openWithPost = function(url, title, data, target) { 

    var form = document.createElement("form"); 
    form.action = url; 
    form.method = "POST"; 
    form.target = target || "_self"; 
    if (data) { 
    for (var key in data) { 
     var input = document.createElement('input'); 
     input.type = 'hidden'; 
     input.name = key; 
     input.value = data[key]; 
     form.appendChild(input); 
    } 
    } 
    form.style.display = 'none'; 
    document.body.appendChild(form); 
    form.submit(); 
} 

백엔드 봄 코드

@RequestMapping(value = "/printCompareChart", method = RequestMethod.POST) 
public ModelAndView printCompareChart(HttpServletRequest httpRequest) 
{ 
    //get each parameter from httpRequest and handle it 
    String fileName = httpRequest.getParameter("fileName"); 
    //logic to create the pdf file 
    byte[] bytes = //get bytes of the pdf file 
    ModelAndView mav = new ModelAndView(); 
    mav.addObject("byteArray", bytes); 
    mav.setViewName("pdfByteArrayPrint"); 
    return mav; 
} 
관련 문제