2012-05-09 50 views
1

我使用Jasper Report创建REST应用程序和PDF,并希望在浏览器上显示PDF文件下载对话框。如何在jax-rs中显示PDF文件下载对话框?

这正是我要寻找:
http://www.mkyong.com/webservices/jax-rs/download-pdf-file-from-jax-rs/

我下面的代码生成PDF文件(MyAwesomeJasperReport25.pdf),但文件下载对话框中的浏览器不显示了,我不明白为什么。

@GET 
@Path("pdf") 
@Produces("application/pdf") 
public Response outputPDF() { 

    OutputStream output = null; 

    try {  
     File jrxmlFile = new File("C:\\Users\\m-takayashiki\\report2.jrxml"); 

     if(jrxmlFile.exists()) { 

      //jrxml compile 
      JasperReport jasperReport = JasperCompileManager.compileReport(jrxmlFile.getAbsolutePath()); 

      //some code emitted   

      JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, dataSource); 

      String filePath = "C:\\Users\\m-takayashiki\\MyAwesomeJasperReport25.pdf"; 
      output = new FileOutputStream(new File(filePath)); 
      JasperExportManager.exportReportToPdfStream(jasperPrint, output); 


      // From here trying to ask user to download PDF   

      ResponseBuilder response = Response.ok((Object) filePath); 

      response.header("Content-disposition", 
        "attachment; filename=MyAwesomeJasperReportDownload.pdf"); 

      return response.build(); 
     } 
    } 
    catch(Exception e) { 
     System.out.println("-------------------- PDF exception "); 
     System.out.println(e); 
     return null; 
    } 
    finally { 
     try { 
      if(output != null) { output.close(); } 
     } 
     catch(Exception e) { System.out.println(e); } 

    } 
} 

回答

1

检查两件事情:响应实体

  1. 你不应该把文件而不是文件路径的实例( “Response.ok((对象)文件路径)”)?
  2. 您的JAX-RS实现是否具有File类的实体提供程序?
+0

你是对的。我应该有文件实例不是文件路径。谢谢!第二个问题,我要检查.. –

-2

你忘了把输出对象Ok()方法:

ResponseBuilder response = Response.ok((Object) filePath);

正确:

ResponseBuilder response = Response.ok((output) filePath);

+1

你确定吗? “output”是实例,不能用于再次对变量“filepath”进行强制转换。它甚至编译? –

0

尝试把文件的byte []的实体,因为Jersey没有用于文件的MessageBodyWriter。您可以使用Apache Commons IO的FileUtils将File转换为byte []。最后你的代码如下所示:

ResponseBuilder response = Response.ok(FileUtils.readFileToByteArray(file)); 
相关问题