2014-03-04 20 views
1

我使用DOJO + Spring MVC,我打电话给一个ExportPDF.html,它生成我的pdf ,但由于我的xhr函数在我的脚本中,y在控制台中加载了这样的内容:“x13 &”#%我认为这是我的PDF文件。我怎么能在一个新的网页显示或允许客户端下载呢?调用jasper PDF并向客户端显示或能够下载它?

这是我exporPDF.html控制器

@RequestMapping(value = "/exportarPDF", method = { 
     RequestMethod.GET, RequestMethod.POST }) 
private @ResponseBody 
void exportarPDF(@ModelAttribute("someBean") somebean someBean, 
     BindingResult result,HttpServletRequest request,HttpServletResponse response) throws Exception { 
    response.setContentType("application/pdf"); 
    JasperReport mainReporte = (JasperReport) JRLoader.loadObject(mainJasper); 
    JasperPrint mainPrint = JasperFillManager.fillReport(mainReporte, parameters, new JRBeanCollectionDataSource(SOMELIST)); 

ServletOutputStream output = response.getOutputStream(); 
JasperExportManager.exportReportToPdfStream(mainPrint, output); 
output.close(); 

}

我的PDF生成伟大的,但我可以看到一个页面或下载,请帮助我

,这是我的脚本方法

   xhr("exportarPDF.html", { 
        query : { 
         someValue: This Value is received well in the Spring Controller 
        }, 
        handleAs : "json", 
        method : "post" 
       }).then(function(data) { 
        //I thinks this data is my pdf! 
       }, function(err) { 
        alert("Error Interno"); 
       }, function(evt) { 
        // Handle a progress event from the request if the 
        // browser supports XHR2  
       }); 

这是我调试与萤火虫

enter image description here

回答

0

我也遇到这种情况。 如XMLHttpRequest to open PDF in browser 回答“如果您正在查询的URL实际上会返回PDF数据,则不能通过xhr执行操作。” 查看链接的解释。 我所做的是将生成的pdf保存在服务器上,并将其名称放在cookie中。 收到回复时,我确认它是pdf(通过检查resp.headers('Content-Type')=='application/pdf')。 然后我调用了一个不同的URL,它使用window.open来渲染pdf。第二个参数('_self')被使用,所以没有新的选项卡被打开。

if (isPDF(response)) 
{ 
    var url=$cookies['fileurl'].substring(1,$cookies['fileurl'].length-1); 
    $window.open('/ws/print?action='+url,'_self'); 
    delete $cookies['fileurl']; 
    return; 
} 
0

您正在尝试通过AJAX下载文件,但您需要的是开始定期下载。

假设你的下载链接是 “exportarPDF.html” 下面将做的工作:

HTML:

<iframe id="invisible" style="display:none;"></iframe> 

的Javascript:

 function downloadPDF() { 
     var iframe = document.getElementById('invisible'); 
     iframe.src = "exportarPDF.html"; 
     } 

说明:

当你设置了iframe的“src”,浏览器就像点击链接一样反应。因此,如果“src”指向的内容类型标识为二​​进制文件,则会启动标准下载对话框,就好像您只需点击下载链接一样。