在 ResponseEntity 中创建 PDF 和 return
Create PDF and return it in ResponseEntity
我正在尝试创建一个 PDF,然后自动下载它。我正在使用 PDFBox 创建 PDF,它在本地保存得很好,但是一旦我通过 ResponseEntity
或 byte[]
return 它就会变成空白。我想使用 post,因为我想发送 PDF 所需的 body 个参数。
这是我的控制器
@PostMapping(value="/documents/generate")
ResponseEntity<?> generateSampleTag(@RequestBody SampleTag sampleTag) {
log.info("inside generatePdfFromHtml method in DocumentController");
try(ByteArrayOutputStream byteArrayOutputStream = freePdfService.generatePdf(sampleTag)) {
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_PDF_VALUE);
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=sampleTag.pdf");
headers.add("Expires", "0");
headers.setCacheControl(CacheControl.noCache());
headers.add("Pragma", "public");
ByteArrayResource resource = new ByteArrayResource(byteArrayOutputStream.toByteArray());
return new ResponseEntity<>(resource, headers, HttpStatus.OK);
} catch (Exception e) {
log.error(e.getMessage());
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
我一直在尝试各种 input/output 流和 header 值,目前我只是在猜测。感谢您的帮助!
我在下面做了回答,但我的问题是 Swagger 无法正确下载它。邮递员工作。
我没有使用过 PDFBox,但它在发送 inputStream 作为 PDF mime 类型的响应之前对我有用 header。
类似...
ByteArrayOutputStream byteArrayOutputStream = freePdfService.generatePdf(sampleTag)
headers.setContentType(MediaType.parseMediaType(MediaType.APPLICATION_PDF_VALUE));
return new ResponseEntity<>(new InputStreamResource(byteArrayOutputStream), headers, HttpStatus.OK);
我的问题是 Swagger 无法正确下载我的 PDF。我在 Postman 中试过了,它成功了...
我正在尝试创建一个 PDF,然后自动下载它。我正在使用 PDFBox 创建 PDF,它在本地保存得很好,但是一旦我通过 ResponseEntity
或 byte[]
return 它就会变成空白。我想使用 post,因为我想发送 PDF 所需的 body 个参数。
这是我的控制器
@PostMapping(value="/documents/generate")
ResponseEntity<?> generateSampleTag(@RequestBody SampleTag sampleTag) {
log.info("inside generatePdfFromHtml method in DocumentController");
try(ByteArrayOutputStream byteArrayOutputStream = freePdfService.generatePdf(sampleTag)) {
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_PDF_VALUE);
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=sampleTag.pdf");
headers.add("Expires", "0");
headers.setCacheControl(CacheControl.noCache());
headers.add("Pragma", "public");
ByteArrayResource resource = new ByteArrayResource(byteArrayOutputStream.toByteArray());
return new ResponseEntity<>(resource, headers, HttpStatus.OK);
} catch (Exception e) {
log.error(e.getMessage());
return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
我一直在尝试各种 input/output 流和 header 值,目前我只是在猜测。感谢您的帮助!
我在下面做了回答,但我的问题是 Swagger 无法正确下载它。邮递员工作。
我没有使用过 PDFBox,但它在发送 inputStream 作为 PDF mime 类型的响应之前对我有用 header。
类似...
ByteArrayOutputStream byteArrayOutputStream = freePdfService.generatePdf(sampleTag)
headers.setContentType(MediaType.parseMediaType(MediaType.APPLICATION_PDF_VALUE));
return new ResponseEntity<>(new InputStreamResource(byteArrayOutputStream), headers, HttpStatus.OK);
我的问题是 Swagger 无法正确下载我的 PDF。我在 Postman 中试过了,它成功了...