From b71a03b067ee4a3de5b403437c57040f6862cfc2 Mon Sep 17 00:00:00 2001 From: "vluk@2fi-solutions.com.hk" Date: Mon, 16 Jun 2025 15:34:43 +0800 Subject: [PATCH] added for pdf form open and save --- .../modules/lioner/web/PdfController.java | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/main/java/com/ffii/lioner/modules/lioner/web/PdfController.java diff --git a/src/main/java/com/ffii/lioner/modules/lioner/web/PdfController.java b/src/main/java/com/ffii/lioner/modules/lioner/web/PdfController.java new file mode 100644 index 0000000..580f5f3 --- /dev/null +++ b/src/main/java/com/ffii/lioner/modules/lioner/web/PdfController.java @@ -0,0 +1,81 @@ +package com.ffii.lioner.modules.lioner.web; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +@RestController +@RequestMapping("/api/pdf") +public class PdfController { + + // Endpoint to serve the initial template PDF + @GetMapping(value = "/template", produces = MediaType.APPLICATION_PDF_VALUE) + public ResponseEntity getPdfTemplate() throws IOException { + // Ensure your template PDF is in src/main/resources/static/ + ClassPathResource pdfFile = new ClassPathResource("static/template_form.pdf"); + if (!pdfFile.exists()) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body("PDF template not found.".getBytes()); + } + byte[] pdfBytes; + try (InputStream is = pdfFile.getInputStream()) { + pdfBytes = is.readAllBytes(); + } + + HttpHeaders headers = new HttpHeaders(); + headers.setContentDispositionFormData("inline", "template_form.pdf"); + headers.setContentType(MediaType.APPLICATION_PDF); + return new ResponseEntity<>(pdfBytes, headers, HttpStatus.OK); + } + + // Endpoint to receive the filled PDF from the frontend + @PostMapping(value = "/saveFilled", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity> saveFilledPdf(@RequestParam("file") MultipartFile file) { + if (file.isEmpty()) { + return ResponseEntity.badRequest().body(Map.of("message", "No file uploaded.")); + } + try { + // Generate a unique filename and save to an 'uploads' directory + String fileName = "filled_form_" + UUID.randomUUID().toString() + ".pdf"; + Path filePath = Paths.get("uploads", fileName); + Files.createDirectories(filePath.getParent()); // Ensure directory exists + Files.copy(file.getInputStream(), filePath); + + Map response = new HashMap<>(); + response.put("message", "PDF saved successfully: " + fileName); + response.put("filePath", filePath.toString()); + return ResponseEntity.ok(response); + + } catch (IOException e) { + e.printStackTrace(); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(Map.of("message", "Failed to save PDF: " + e.getMessage())); + } + } + + // Optional: Endpoint to receive just the form data (e.g., JSON) + @PostMapping("/saveFormData") + public ResponseEntity> saveFormData(@RequestBody Map formData) { + System.out.println("Received form data: " + formData); + Map response = new HashMap<>(); + response.put("message", "Form data received and processed successfully."); + return ResponseEntity.ok(response); + } +}