调用jasper PDF并显示给客户端或能够下载吗?

时间:2014-03-04 18:44:51

标签: javascript spring-mvc pdf dojo jasper-reports

我是DOJO + Spring MVC,我打电话给ExportPDF.html生成我的pdf 但是由于我的脚本中的xhr函数,你在控制台中有这样的问题@“x13&”#%“我认为这是我的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     
                });

这是我用firebug进行的调试

enter image description here

2 个答案:

答案 0 :(得分:0)

我也遇到过这种情况。 正如XMLHttpRequest to open PDF in browser中的回答 “如果您查询的URL实际上返回PDF数据,则无法通过xhr进行操作。” 请参阅链接以获取解释。 我所做的是在服务器上保存generate pdf并将其名称放在cookie中。 收到回复后,我确认它是pdf(通过检查是否resp.headers('Content-Type')=='application/pdf')。 然后我调用了另一个使用window.open渲染pdf的url。使用第二个参数('_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;
 }

答案 1 :(得分: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”指向的内容具有标识为二进制文件的内容类型,则启动标准下载对话框,就像您只需单击下载链接一样。