astar
astar

Reputation: 325

SpringBoot REST produces pdf

I want to generate a dynamic PDF from a SpringBoot REST endpoint. The below generates a file but not a PDF. Any pointers in how to get a PDF file by altering the below code. Thanks in advance.

@GetMapping(value = "/generatePDF", produces = "application/pdf")
    @SneakyThrows
    public ResponseEntity<InputStreamResource> generatePDF(HttpServletRequest httpRequest,
            HttpServletResponse response) {
        String str = "Some test data goes here...";
        byte[] pdf = str.getBytes();

        File file = new File("C:\\test\\test.pdf");

        FileUtils.writeByteArrayToFile(file, pdf);

        FileInputStream fileInputStream = new FileInputStream(file);

        return ResponseEntity.ok().contentLength(file.length())
                .contentType(MediaType.APPLICATION_PDF)
                .header("content-disposition", "filename=report.pdf")
                .body(new InputStreamResource(fileInputStream));


Upvotes: 0

Views: 2191

Answers (1)

shubham gulati
shubham gulati

Reputation: 101

try this

@GetMapping(value = "/generatePDF", produces = "application/pdf")
@SneakyThrows
public ResponseEntity<byte[]> generatePDF(HttpServletRequest httpRequest,                                                     HttpServletResponse response) {
    String str = "Some test data goes here...";
    byte[] pdf = str.getBytes();
    File file = new File("C:\\test\\test.pdf");
    FileUtils.writeByteArrayToFile(file, pdf);
    HttpHeaders header = new HttpHeaders();
    header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    header.setContentLength(pdf.length);
    header.set("Content-Disposition", "attachment; filename=" + "pdf-" + id + ".pdf");
    return new ResponseEntity<>(pdf, header, HttpStatus.OK);
}

Upvotes: 1

Related Questions