Создать PDF и вернуть его в ResponseEntity - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь создать PDF, а затем загрузить его автоматически. Я использую PDFBox для создания PDF, и он хорошо сохраняется локально, но как только я возвращаю его через ResponseEntity или byte[], он становится пустым. Я хочу использовать сообщение, потому что я хочу отправить тело параметров, которые мне нужны для PDF.

Вот мой контроллер

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

    }

Я пробовал различные потоки ввода / вывода и значения заголовков, и сейчас я только догадываюсь. Спасибо за помощь!

Я ответил ниже, но моя проблема была в том, что Swagger не мог загрузить его правильно. Почтальон работал.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Моя проблема заключалась в том, что Swagger не мог правильно загрузить мой PDF. Я попробовал это в Почтальоне, и это сработало ...

0 голосов
/ 26 апреля 2018

Я не использовал PDFBox, но раньше мне приходилось отправлять inputStream в качестве ответа с заголовком типа mime PDF.

Что-то вроде ...

ByteArrayOutputStream byteArrayOutputStream = freePdfService.generatePdf(sampleTag)
headers.setContentType(MediaType.parseMediaType(MediaType.APPLICATION_PDF_VALUE));
return new ResponseEntity<>(new InputStreamResource(byteArrayOutputStream), headers, HttpStatus.OK);
...