2017-02-21 21 views
0

Я хочу, чтобы показать PDF в новой вкладке после вызвавшего его, им с помощью JQuery 1.12.3 и Spring MVC 4.Показать PDF в новой вкладке не работаете с JQuery и Spring MVC

Когда я CLIC по моей ссылке, я генерировать pdf, а мой метод ajax показывает успех, но мой pdf не отображается на новой вкладке, что я забыл?

я уже follewed эти сообщения:

Display PDF in a webpage

Open ResponseEntity PDF in new browser tab

Spring - display PDF-file in browser instead of downloading

Я пытался удалить ResponseBody аннотаций, но я тот же результат

Это мой код:

HTML:

<a id="3676274" class="bulletinLink" target="_blank" href="#">Bulletin du 2015-04-30</a> 

JQuery:

$(".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"); 
    }); 
}); 

Java:

@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; 
} 

ответ

0

Проблема в том, нужно добавить файл в HttpServletResponse, и нет необходимости возвращать никакого значения в методе, так что используйте аннулируются, добавление файла в ответ, браузер будет обрабатывать его правильно

@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()); 
    } 
} 
0

Я изменить Jquery функцию без Ajax как это, и это работает ноу:

window.open(sUrl); 

Кроме того, для отображения моего PDF на вкладке и не загрузить его, я удалить эту инструкцию в контроллере:

headers.setContentDispositionFormData(filename, filename);