2014-04-17 3 views
1

jquery와 jax-rs를 사용하여 pdf 파일을 다운로드하려고합니다. pdf 파일이 동적으로 생성됩니다.jax-rs를 사용하여 jquery로 PDF 다운로드

테스트 목적으로 로컬 pdf 파일을 설정했습니다. 나중에 pdf를 생성하기위한 몇 가지 매개 변수를 구문 분석해야합니다. 이 params를 서버에 게시하고 서버가 pdf 파일을 다시 보냅니다. 이제 마침내 donwload-window를 보려면 JS 측에서 무엇을 할 수 있습니까?

자바 쪽 :

@Path ("/ chatexport /") 공용 클래스 ChatExportController {

private static final String FILE_PATH = "c:\\own\\test.pdf"; 

@POST 
@Path("/") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces("application/pdf") 
public Response getFile(List<ChatMessage> chatMessageList) { 
    File file = new File(FILE_PATH); 

    ResponseBuilder response = Response.ok((Object) file); 
    response.header("Content-Disposition", 
      "attachment; filename=new-android-book.pdf"); 
    return response.build(); 

} 

자바 스크립트 쪽 :

$.ajax({ 
     type: "POST", 
     url: EXPORT_URL, 
     contentType: "application/json", 
     data: JSON.stringify([{authorId:"1",timestamp:123,content:"Test123"}]), 
     dataType: "application/pdf", 
     success: function (json, status) { 
      if (status != "success") { 
       console.log("Error loading data"); 
       return; 
      } 
      console.log("Data loaded!"); 
     }, 
     error: function (result, status, err) { 
      console.log("Error loading data", err); 
      return; 
     } 
    }); 

오류에 Err 개체 던져진 콜백은 다음과 같이 말합니다. No conversion from text to application/pdf

답변

0

비슷한 문제에 대해이 기술을 사용했습니다. 다운로드 단추를 클릭 할 때 (또는 다운로드 이벤트가 발생할 때) 페이지 내에 보이지 않는 iframe을 만들고 iframe의 원본을 PDF URL로 설정합니다. 이 기법에 대한 Content-Disposition 헤더도 유지해야합니다. 파일이 자동으로 다운로드됩니다.

+0

음, pdf 파일에 대한 구체적인 다운로드 URL이 없습니다. 문제는 pdf가 생성되었는지 확인하기 전에 JSON 데이터를 보내야한다는 것입니다. 그런 다음 다운로드하십시오. – Christian

+0

계속 사용할 수 있습니다. (숨겨진) iframe을 대상으로하는 (동적) 양식을 만듭니다. 이 양식을 사용하여 POST 할 수 있으며 응답을 계속 다운로드 할 수 있습니다. –