반응형
Spring MVC를 사용하여 생성 된 PDF 반환
Spring MVC를 사용하고 있습니다. 요청 본문에서 입력을 받고 pdf에 데이터를 추가하고 pdf 파일을 브라우저에 반환하는 서비스를 작성해야합니다. pdf 문서는 itextpdf를 사용하여 생성됩니다. Spring MVC를 사용하여 어떻게 할 수 있습니까? 나는 이것을 사용해 보았다
@RequestMapping(value="/getpdf", method=RequestMethod.POST)
public Document getPDF(HttpServletRequest request , HttpServletResponse response,
@RequestBody String json) throws Exception {
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment:filename=report.pdf");
OutputStream out = response.getOutputStream();
Document doc = PdfUtil.showHelp(emp);
return doc;
}
pdf를 생성하는 showhelp 함수. 나는 잠시 동안 pdf에 임의의 데이터를 넣는 중입니다.
public static Document showHelp(Employee emp) throws Exception {
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("C:/tmp/report.pdf"));
document.open();
document.add(new Paragraph("table"));
document.add(new Paragraph(new Date().toString()));
PdfPTable table=new PdfPTable(2);
PdfPCell cell = new PdfPCell (new Paragraph ("table"));
cell.setColspan (2);
cell.setHorizontalAlignment (Element.ALIGN_CENTER);
cell.setPadding (10.0f);
cell.setBackgroundColor (new BaseColor (140, 221, 8));
table.addCell(cell);
ArrayList<String[]> row=new ArrayList<String[]>();
String[] data=new String[2];
data[0]="1";
data[1]="2";
String[] data1=new String[2];
data1[0]="3";
data1[1]="4";
row.add(data);
row.add(data1);
for(int i=0;i<row.size();i++) {
String[] cols=row.get(i);
for(int j=0;j<cols.length;j++){
table.addCell(cols[j]);
}
}
document.add(table);
document.close();
return document;
}
나는 이것이 잘못된 것이라고 확신합니다. 해당 pdf가 생성되고 저장 / 열기 대화 상자가 브라우저를 통해 열리도록하여 클라이언트의 파일 시스템에 저장할 수 있기를 바랍니다. 제발 도와주세요.
You were on the right track with response.getOutputStream()
, but you're not using its output anywhere in your code. Essentially what you need to do is to stream the PDF file's bytes directly to the output stream and flush the response. In Spring you can do it like this:
@RequestMapping(value="/getpdf", method=RequestMethod.POST)
public ResponseEntity<byte[]> getPDF(@RequestBody String json) {
// convert JSON to Employee
Employee emp = convertSomehow(json);
// generate the file
PdfUtil.showHelp(emp);
// retrieve contents of "C:/tmp/report.pdf" that were written in showHelp
byte[] contents = (...);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_PDF);
// Here you have to set the actual filename of your pdf
String filename = "output.pdf";
headers.setContentDispositionFormData(filename, filename);
headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
ResponseEntity<byte[]> response = new ResponseEntity<>(contents, headers, HttpStatus.OK);
return response;
}
Notes:
- use meaningful names for your methods: naming a method that writes a PDF document
showHelp
is not a good idea - reading a file into a
byte[]
: example here - I'd suggest adding a random string to the temporary PDF file name inside
showHelp()
to avoid overwriting the file if two users send a request at the same time
ReferenceURL : https://stackoverflow.com/questions/16652760/return-generated-pdf-using-spring-mvc
반응형
'Programing' 카테고리의 다른 글
Java Set에서 * 모든 * 값을 얻는 좋은 방법은 무엇입니까? (0) | 2020.12.31 |
---|---|
사용자 정의 열거 형도 직렬화 가능합니까? (0) | 2020.12.30 |
두 열 테이블에서 두 열에 걸쳐 하나를 만드는 방법은 무엇입니까? (0) | 2020.12.30 |
Python : 디렉토리에서 확장자가 .MP3 인 최신 파일 찾기 (0) | 2020.12.30 |
WPF 창에서 현재 포커스가있는 요소 / 컨트롤 가져 오기 (0) | 2020.12.30 |