Java 在新选项卡中显示pdf不适用于jquery和spring mvc
我想在生成pdf后在新选项卡中显示它,我使用jQuery1.12.3和SpringMVC4 当我点击我的链接时,我生成了pdf,我的ajax方法显示成功,但我的pdf没有显示在新选项卡中,我忘记了什么 我浏览了以下帖子: 我试图删除ResponseBody注释,但得到了相同的结果 这是我的密码: HTML:Java 在新选项卡中显示pdf不适用于jquery和spring mvc,java,jquery,spring,spring-mvc,pdf,Java,Jquery,Spring,Spring Mvc,Pdf,我想在生成pdf后在新选项卡中显示它,我使用jQuery1.12.3和SpringMVC4 当我点击我的链接时,我生成了pdf,我的ajax方法显示成功,但我的pdf没有显示在新选项卡中,我忘记了什么 我浏览了以下帖子: 我试图删除ResponseBody注释,但得到了相同的结果 这是我的密码: HTML: <a id="3676274" class="bulletinLink" target="_blank" href="#">Bulletin du 2015-04-30&l
<a id="3676274" class="bulletinLink" target="_blank" href="#">Bulletin du 2015-04-30</a>
$(".bulletinLink").click(function(e){
e.preventDefault();
var id = $(this).attr('id');
var oAjax;
var sUrl = sUrlBase + '/generatePdf/'+id;
oAjax = $.ajax({
url: sUrl,
type: 'GET',
cache: false,
data : '',
async : false
});
oAjax.done(function(transport) {
alert("success");
});
oAjax.fail(function(transport) {
alert("fail");
});
});
@RequestMapping(value = "/generatePdf/{id}", method = RequestMethod.GET)
@ResponseBody
public final ResponseEntity<byte[]> generateWithResponseBody(@PathVariable("id") final int idBulletin
,final HttpServletRequest httpRequete, final HttpServletResponse httpReponse) throws ApplicationException
{
...
HttpHeaders headers = new HttpHeaders();
headers.setContentType( MediaType.parseMediaType( "application/pdf" ) );
String filename = "spring_tutorial.pdf";
headers.setContentDispositionFormData( filename, filename );
headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(out.toByteArray(), headers, HttpStatus.OK);
return response;
}
Java:
<a id="3676274" class="bulletinLink" target="_blank" href="#">Bulletin du 2015-04-30</a>
$(".bulletinLink").click(function(e){
e.preventDefault();
var id = $(this).attr('id');
var oAjax;
var sUrl = sUrlBase + '/generatePdf/'+id;
oAjax = $.ajax({
url: sUrl,
type: 'GET',
cache: false,
data : '',
async : false
});
oAjax.done(function(transport) {
alert("success");
});
oAjax.fail(function(transport) {
alert("fail");
});
});
@RequestMapping(value = "/generatePdf/{id}", method = RequestMethod.GET)
@ResponseBody
public final ResponseEntity<byte[]> generateWithResponseBody(@PathVariable("id") final int idBulletin
,final HttpServletRequest httpRequete, final HttpServletResponse httpReponse) throws ApplicationException
{
...
HttpHeaders headers = new HttpHeaders();
headers.setContentType( MediaType.parseMediaType( "application/pdf" ) );
String filename = "spring_tutorial.pdf";
headers.setContentDispositionFormData( filename, filename );
headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(out.toByteArray(), headers, HttpStatus.OK);
return response;
}
@RequestMapping(value=“/generatePdf/{id}”,method=RequestMethod.GET)
@应答器
公共最终响应Entity generateWithResponseBody(@PathVariable(“id”)final int idBulletin
,最终HttpServletRequest HttpRequeste,最终HttpServletResponse HttpReporte)引发应用程序异常
{
...
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.parseMediaType(“application/pdf”);
字符串filename=“spring\u tutorial.pdf”;
headers.setContentDispositionFormData(文件名、文件名);
headers.setCacheControl(“必须重新验证,后检查=0,前检查=0”);
ResponseEntity response=新的ResponseEntity(out.toByteArray(),headers,HttpStatus.OK);
返回响应;
}
问题是您需要将文件添加到HttpServletResponse,并且不需要在方法中返回任何值,因此使用void,将文件添加到响应中,浏览器将正确处理它
@RequestMapping(value = "/generatePdf/{id}", method = RequestMethod.GET)
@ResponseBody
public final void generateWithResponseBody(@PathVariable("id") final int idBulletin
,final HttpServletRequest httpRequete, final HttpServletResponse reponse) throws ApplicationException
{
//Here retrieve your PDF file
if(file != null) {
String mimeType = URLConnection.guessContentTypeFromName(file.getName());
if (mimeType == null) {
logger.debug("mimetype is not detectable, will take default");
mimeType = "application/pdf";
}
logger.debug("mimetype : {}", mimeType);
response.setContentType(mimeType);
response.setHeader("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getName()));
response.setContentLength((int) file.length());
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
FileCopyUtils.copy(inputStream, response.getOutputStream());
}
}
我在没有Ajax的情况下更改了jquery函数,如下所示:
window.open(sUrl);
此外,为了在选项卡中显示我的pdf文件并且不下载,我在控制器中删除了以下说明:
headers.setContentDispositionFormData( filename, filename );