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