2014-04-17 27 views
1

我会尝试使用jquery和jax-rs下载pdf文件。该pdf文件将被动态创建。使用jax-rs下载jQuery的pdf

出于测试目的,我刚刚设置了本地pdf文件。我需要解析一些参数以便稍后生成PDF。我将发布这些参数到服务器,服务器发回一个pdf文件。现在我可以在JS端做什么来终于看到donwload窗口?

Java端:

@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(); 

} 

Javascript的侧面:

$.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文件。问题是我需要发送JSON数据才能确保生成pdf。然后下载它。 – Christian

+0

你仍然可以使用它。创建一个(动态)表单,其中包含(隐藏的)iframe的目标。您可以使用此表单进行POST,并且仍可以下载响应。 –