| @@ -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<byte[]> 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<Map<String, String>> 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<String, String> 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<Map<String, String>> saveFormData(@RequestBody Map<String, Object> formData) { | |||
| System.out.println("Received form data: " + formData); | |||
| Map<String, String> response = new HashMap<>(); | |||
| response.put("message", "Form data received and processed successfully."); | |||
| return ResponseEntity.ok(response); | |||
| } | |||
| } | |||