Как я могу загрузить созданный PDF-файл, не сохраняя его на сервере? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть приложение Jhipster, которое генерирует PDF с библиотекой iText, этот PDF сохраняется на компьютере по указанному мною маршруту. Я хотел бы, чтобы при создании PDF-файла появилось диалоговое окно для загрузки PDF-файла. Мне безразлично, сохранен ли pdf в папке проекта или нет в любом месте.

Я видел много постов с возможными ответами на этой странице и в Интернете, но многие уже устарели, а другие не работают для меня.

generatePDF

public void generatePDF(User u) {

        String dest = "D:/PDF/result.pdf";
        String src = "D:/PDF/template.pdf";

        try {
            PdfDocument pdf = new PdfDocument(new PdfReader(src), new PdfWriter(dest));
            PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
            Map<String, PdfFormField> fields = form.getFormFields();

            fields.get("name").setValue(u.getFirstName());
            fields.get("surname").setValue(u.getLastName());
            fields.get("email").setValue(u.getEmail());

            pdf.close();

        } catch (IOException e) {
            log.debug(e.getMessage());
        }
    }

UserResource

    @GetMapping("/print-user/{id}")
    @Timed
    public ResponseEntity<User> printUserTemplate(@PathVariable Long id) {
        User user = userRepository.findOne(id);
        userService.generatePDF(user);
        return ResponseUtil.wrapOrNotFound(Optional.ofNullable(user));
    }

EDIT

entity.component.ts

    downloadFile() {
        this.entityService.downloadFile().subscribe();
    }

entity.service.ts

    downloadFile(): Observable<any> {
        return this.http.get(SERVER_API_URL + 'api/downloadFile');
    }

1 Ответ

0 голосов
/ 09 апреля 2019

Используйте это, чтобы загрузить файл:

@GetMapping("/downloadFile")
    public ResponseEntity<Resource> downloadFile(HttpServletRequest request) {
        // Load file as Resource
        Resource resource = testService.loadFileAsResource();

        // Try to determine file's content type
        String contentType = null;
        try {
            contentType = request.getServletContext().getMimeType(resource.getFile().getAbsolutePath());
        } catch (IOException ex) {
            log.info("Could not determine file type.");
        }

        // Fallback to the default content type if type could not be determined
        if (contentType == null) {
            contentType = "application/octet-stream";
        }

        return ResponseEntity.ok().contentType(MediaType.parseMediaType(contentType)).header(
            HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"").body(resource);
    }

И это для генерации файла:

public Resource loadFileAsResource() {
    try {
        Path path = Paths.get("D:\\PDF\\template.pdf");
        Path filePath = path.normalize();

        Resource resource = new UrlResource(filePath.toUri());
        if (resource.exists()) {
            return resource;
        } else {
            return null;
        }
    } catch (MalformedURLException ex) {
        ex.printStackTrace();
        return null;
    }
}

Ссылка: https://www.callicoder.com/spring-boot-file-upload-download-rest-api-example/

загрузить файл из службы загрузки boot Spring

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...