2014-02-19 4 views
11

나는 스프링 MVC 응용 프로그램에서 클라이언트로 파일 ("Return generated PDF using Spring MVC")을 보여주기 위해 도움이 PDF 생성 코드를 건너 왔어요 PDF 파일 ("Spring 3.0 Java REST return PDF document") : produces = "application/pdf".열기 ResponseEntity의 PDF는

위의 코드를 실행하면 클라이언트에 즉시 PDF 파일을 저장하라는 메시지가 표시됩니다. 나는 클라이언트가 그것을 저장할지 안할지 결정할 수 있도록 브라우저에서 먼저 PDF 파일을 보길 원합니다.

"How to get PDF content (served from a Spring MVC controller method) to appear in a new window"은 스프링 양식 태그에 target="_blank"을 추가하는 것으로 나타났습니다. 테스트를 마쳤고 예상대로 새 탭이 표시되었지만 저장 프롬프트가 다시 나타났습니다.

또 다른 "I can't open a .pdf in my browser by Java"의 방법은 httpServletResponse.setHeader("Content-Disposition", "inline");을 추가하지만 내 PDF 파일을 제공하는 데는 HttpServletRequest을 사용하지 않습니다.

코드/상황에 따라 새 탭에서 PDF 파일을 열려면 어떻게해야합니까?

답변

14

httpServletResponse.setHeader("Content-Disposition", "inline"); 

을 시도하지만 다음과 같이 responseEntity를 사용하여.

HttpHeaders headers = new HttpHeaders(); 
headers.add("content-disposition", "attachment; filename=" + fileName) 
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(
      pdfContents, headers, HttpStatus.OK); 

그것은이 약

확실하지 작동해야하지만, 당신이 setContentDispositionFormData 나쁜 사용하는 것,>

headers.setContentDispositionFormData("attachment", fileName); 

가 그

UPDATE를 작동하는지 알려줘 시도

이 동작은 브라우저 및 파일 에 따라 다릅니다. 인라인을 사용하면 브라우저가 브라우저에서 파일을 열려고 시도합니다.

headers.setContentDispositionFormData("inline", fileName); 

또는

headers.add("content-disposition", "inline;filename=" + fileName) 

차이 between inline and attachment

+0

안녕을 알고 이것을 읽어보세요! headers.add ("content-disposition", "attachment; filename ="+ fileName)'를 추가하고 PDF가 저장되도록 요청합니다. (새 브라우저 탭에 PDF 파일이 표시되지 않았습니다. 편집을 위해, 예, 나는 그것을 놓쳤습니다.) –

+0

내 대답에 업데이트를 추가했습니다. 첨부 파일 인라인 insead를 사용하여 촬영을 시도하십시오. – Koitoer

+1

headers.add ("Content-Disposition", "inline; filename ="+ fileName) ;) 트릭을 (다른 하나없이)했습니다. 감사합니다! –

0
/* Here is a simple code that worked just fine to open pdf(byte stream) file 
* in browser , Assuming you have a a method yourService.getPdfContent() that 
* returns the bite stream for the pdf file 
*/ 

@GET 
@Path("/download/") 
@Produces("application/pdf") 
public byte[] getDownload() { 
    byte[] pdfContents = yourService.getPdfContent(); 
    return pdfContents; 
}