diff --git a/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java b/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java index 8909c70e5..0fb2f2e8d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/AnalysisController.java @@ -59,7 +59,8 @@ public class AnalysisController { description = "Returns title, author, subject, etc. Input:PDF Output:JSON Type:SISO") public Map getDocumentProperties(@ModelAttribute PDFFile file) throws IOException { - // Load the document in read-only mode to prevent modifications and ensure the integrity of the original file. + // Load the document in read-only mode to prevent modifications and ensure the integrity of + // the original file. try (PDDocument document = pdfDocumentFactory.load(file.getFileInput(), true)) { PDDocumentInformation info = document.getDocumentInformation(); Map properties = new HashMap<>(); @@ -180,7 +181,8 @@ public class AnalysisController { // Get permissions Map permissions = new HashMap<>(); - permissions.put("preventPrinting", !document.getCurrentAccessPermission().canPrint()); + permissions.put( + "preventPrinting", !document.getCurrentAccessPermission().canPrint()); permissions.put( "preventModify", !document.getCurrentAccessPermission().canModify()); permissions.put( diff --git a/src/main/java/stirling/software/SPDF/controller/api/CropController.java b/src/main/java/stirling/software/SPDF/controller/api/CropController.java index ad16c460e..0c4afc861 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/CropController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/CropController.java @@ -39,8 +39,8 @@ public class CropController { description = "This operation takes an input PDF file and crops it according to the given" + " coordinates. Input:PDF Output:PDF Type:SISO") - public ResponseEntity cropPdf(@ModelAttribute CropPdfForm form) throws IOException { - PDDocument sourceDocument = pdfDocumentFactory.load(form); + public ResponseEntity cropPdf(@ModelAttribute CropPdfForm request) throws IOException { + PDDocument sourceDocument = pdfDocumentFactory.load(request); PDDocument newDocument = pdfDocumentFactory.createNewDocumentBasedOnOldDocument(sourceDocument); @@ -64,7 +64,8 @@ public class CropController { contentStream.saveGraphicsState(); // Define the crop area - contentStream.addRect(form.getX(), form.getY(), form.getWidth(), form.getHeight()); + contentStream.addRect( + request.getX(), request.getY(), request.getWidth(), request.getHeight()); contentStream.clip(); // Draw the entire formXObject @@ -76,7 +77,11 @@ public class CropController { // Now, set the new page's media box to the cropped size newPage.setMediaBox( - new PDRectangle(form.getX(), form.getY(), form.getWidth(), form.getHeight())); + new PDRectangle( + request.getX(), + request.getY(), + request.getWidth(), + request.getHeight())); } ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -87,7 +92,7 @@ public class CropController { byte[] pdfContent = baos.toByteArray(); return WebResponseUtils.bytesToWebResponse( pdfContent, - form.getFileInput().getOriginalFilename().replaceFirst("[.][^.]+$", "") + request.getFileInput().getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_cropped.pdf"); } } diff --git a/src/main/java/stirling/software/SPDF/controller/api/EmailController.java b/src/main/java/stirling/software/SPDF/controller/api/EmailController.java index 3b91368ef..6f7dd3867 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/EmailController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/EmailController.java @@ -8,6 +8,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.mail.MessagingException; @@ -41,7 +42,13 @@ public class EmailController { * @return ResponseEntity with success or error message. */ @PostMapping(consumes = "multipart/form-data", value = "/send-email") + @Operation( + summary = "Send an email with an attachment", + description = + "This endpoint sends an email with an attachment. Input:PDF" + + " Output:Success/Failure Type:MISO") public ResponseEntity sendEmailWithAttachment(@Valid @ModelAttribute Email email) { + log.info("Sending email to: {}", email.toString()); try { // Calls the service to send the email with attachment emailService.sendEmailWithAttachment(email); diff --git a/src/main/java/stirling/software/SPDF/controller/api/MergeController.java b/src/main/java/stirling/software/SPDF/controller/api/MergeController.java index a226bd02d..f8ee0d1b5 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/MergeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/MergeController.java @@ -117,20 +117,20 @@ public class MergeController { "This endpoint merges multiple PDF files into a single PDF file. The merged" + " file will contain all pages from the input files in the order they were" + " provided. Input:PDF Output:PDF Type:MISO") - public ResponseEntity mergePdfs(@ModelAttribute MergePdfsRequest form) + public ResponseEntity mergePdfs(@ModelAttribute MergePdfsRequest request) throws IOException { List filesToDelete = new ArrayList<>(); // List of temporary files to delete File mergedTempFile = null; PDDocument mergedDocument = null; - boolean removeCertSign = form.isRemoveCertSign(); + boolean removeCertSign = Boolean.TRUE.equals(request.getRemoveCertSign()); try { - MultipartFile[] files = form.getFileInput(); + MultipartFile[] files = request.getFileInput(); Arrays.sort( files, getSortComparator( - form.getSortType())); // Sort files based on the given sort type + request.getSortType())); // Sort files based on the given sort type PDFMergerUtility mergerUtility = new PDFMergerUtility(); long totalSize = 0; diff --git a/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java b/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java index f8f4bd73c..bb795a08a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/MultiPageLayoutController.java @@ -47,7 +47,7 @@ public class MultiPageLayoutController { int pagesPerSheet = request.getPagesPerSheet(); MultipartFile file = request.getFileInput(); - boolean addBorder = request.isAddBorder(); + boolean addBorder = Boolean.TRUE.equals(request.getAddBorder()); if (pagesPerSheet != 2 && pagesPerSheet != 3 diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java index 5e0f1d012..b50e4eb96 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfByChaptersController.java @@ -127,7 +127,7 @@ public class SplitPdfByChaptersController { Path zipFile = null; try { - boolean includeMetadata = request.getIncludeMetadata(); + boolean includeMetadata = Boolean.TRUE.equals(request.getIncludeMetadata()); Integer bookmarkLevel = request.getBookmarkLevel(); // levels start from 0 (top most bookmarks) if (bookmarkLevel < 0) { @@ -161,7 +161,7 @@ public class SplitPdfByChaptersController { .body("Unable to extract outline items".getBytes()); } - boolean allowDuplicates = request.getAllowDuplicates(); + boolean allowDuplicates = Boolean.TRUE.equals(request.getAllowDuplicates()); if (!allowDuplicates) { /* duplicates are generated when multiple bookmarks correspond to the same page, diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java index a2b0e2add..fec4e2657 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java @@ -60,7 +60,7 @@ public class SplitPdfBySectionsController { // Process the PDF based on split parameters int horiz = request.getHorizontalDivisions() + 1; int verti = request.getVerticalDivisions() + 1; - boolean merge = request.isMerge(); + boolean merge = Boolean.TRUE.equals(request.getMerge()); List splitDocuments = splitPdfPages(sourceDocument, verti, horiz); String filename = diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java index 2fad77e37..ae46f5d45 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java @@ -58,7 +58,7 @@ public class ConvertImgPDFController { String imageFormat = request.getImageFormat(); String singleOrMultiple = request.getSingleOrMultiple(); String colorType = request.getColorType(); - String dpi = request.getDpi(); + int dpi = request.getDpi(); String pageNumbers = request.getPageNumbers(); Path tempFile = null; Path tempOutputDir = null; @@ -94,7 +94,7 @@ public class ConvertImgPDFController { : imageFormat.toUpperCase(), colorTypeResult, singleImage, - Integer.valueOf(dpi), + dpi, filename); if (result == null || result.length == 0) { log.error("resultant bytes for {} is null, error converting ", filename); @@ -132,7 +132,7 @@ public class ConvertImgPDFController { command.add(tempOutputDir.toString()); } command.add("--dpi"); - command.add(dpi); + command.add(String.valueOf(dpi)); ProcessExecutorResult resultProcess = ProcessExecutor.getInstance(ProcessExecutor.Processes.PYTHON_OPENCV) .runCommandWithOutputHandling(command); @@ -213,7 +213,7 @@ public class ConvertImgPDFController { MultipartFile[] file = request.getFileInput(); String fitOption = request.getFitOption(); String colorType = request.getColorType(); - boolean autoRotate = request.isAutoRotate(); + boolean autoRotate = Boolean.TRUE.equals(request.getAutoRotate()); // Handle Null entries for formdata if (colorType == null || colorType.isBlank()) { colorType = "color"; diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java index b8a190f90..1124eceb7 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java @@ -47,9 +47,8 @@ public class ConvertMarkdownToPdf { description = "This endpoint takes a Markdown file input, converts it to HTML, and then to" + " PDF format. Input:MARKDOWN Output:PDF Type:SISO") - public ResponseEntity markdownToPdf(@ModelAttribute GeneralFile request) - throws Exception { - MultipartFile fileInput = request.getFileInput(); + public ResponseEntity markdownToPdf(@ModelAttribute GeneralFile generalFile) throws Exception { + MultipartFile fileInput = generalFile.getFileInput(); if (fileInput == null) { throw new IllegalArgumentException("Please provide a Markdown file for conversion."); diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java index 38a0ac16e..52976b44d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java @@ -90,9 +90,9 @@ public class ConvertOfficeController { description = "This endpoint converts a given file to a PDF using LibreOffice API Input:ANY" + " Output:PDF Type:SISO") - public ResponseEntity processFileToPDF(@ModelAttribute GeneralFile request) + public ResponseEntity processFileToPDF(@ModelAttribute GeneralFile generalFile) throws Exception { - MultipartFile inputFile = request.getFileInput(); + MultipartFile inputFile = generalFile.getFileInput(); // unused but can start server instance if startup time is to long // LibreOfficeListener.getInstance().start(); File file = null; diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToHtml.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToHtml.java index beafd3896..c3233f4d7 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToHtml.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToHtml.java @@ -23,9 +23,8 @@ public class ConvertPDFToHtml { summary = "Convert PDF to HTML", description = "This endpoint converts a PDF file to HTML format. Input:PDF Output:HTML Type:SISO") - public ResponseEntity processPdfToHTML(@ModelAttribute PDFFile request) - throws Exception { - MultipartFile inputFile = request.getFileInput(); + public ResponseEntity processPdfToHTML(@ModelAttribute PDFFile file) throws Exception { + MultipartFile inputFile = file.getFileInput(); PDFToFile pdfToFile = new PDFToFile(); return pdfToFile.processPdfToHtml(inputFile); } diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToOffice.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToOffice.java index 76f0b9286..c2563887c 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToOffice.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToOffice.java @@ -97,9 +97,8 @@ public class ConvertPDFToOffice { description = "This endpoint converts a PDF file to an XML file. Input:PDF Output:XML" + " Type:SISO") - public ResponseEntity processPdfToXML(@ModelAttribute PDFFile request) - throws Exception { - MultipartFile inputFile = request.getFileInput(); + public ResponseEntity processPdfToXML(@ModelAttribute PDFFile file) throws Exception { + MultipartFile inputFile = file.getFileInput(); PDFToFile pdfToFile = new PDFToFile(); return pdfToFile.processPdfToOfficeFormat(inputFile, "xml", "writer_pdf_import"); diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java index 878936534..4ee3f7606 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ExtractCSVController.java @@ -52,12 +52,12 @@ public class ExtractCSVController { description = "This operation takes an input PDF file and returns CSV file of whole page." + " Input:PDF Output:CSV Type:SISO") - public ResponseEntity pdfToCsv(@ModelAttribute PDFWithPageNums form) throws Exception { - String baseName = getBaseName(form.getFileInput().getOriginalFilename()); + public ResponseEntity pdfToCsv(@ModelAttribute PDFWithPageNums request) throws Exception { + String baseName = getBaseName(request.getFileInput().getOriginalFilename()); List csvEntries = new ArrayList<>(); - try (PDDocument document = pdfDocumentFactory.load(form)) { - List pages = form.getPageNumbersList(document, true); + try (PDDocument document = pdfDocumentFactory.load(request)) { + List pages = request.getPageNumbersList(document, true); SpreadsheetExtractionAlgorithm sea = new SpreadsheetExtractionAlgorithm(); CSVFormat format = CSVFormat.EXCEL.builder().setEscape('"').setQuoteMode(QuoteMode.ALL).build(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java b/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java index 935118a7d..09d93a8b0 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/filters/FilterController.java @@ -77,7 +77,7 @@ public class FilterController { public ResponseEntity pageCount(@ModelAttribute PDFComparisonAndCount request) throws IOException, InterruptedException { MultipartFile inputFile = request.getFileInput(); - String pageCount = request.getPageCount(); + int pageCount = request.getPageCount(); String comparator = request.getComparator(); // Load the PDF PDDocument document = pdfDocumentFactory.load(inputFile); @@ -87,13 +87,13 @@ public class FilterController { // Perform the comparison switch (comparator) { case "Greater": - valid = actualPageCount > Integer.parseInt(pageCount); + valid = actualPageCount > pageCount; break; case "Equal": - valid = actualPageCount == Integer.parseInt(pageCount); + valid = actualPageCount == pageCount; break; case "Less": - valid = actualPageCount < Integer.parseInt(pageCount); + valid = actualPageCount < pageCount; break; default: throw new IllegalArgumentException("Invalid comparator: " + comparator); @@ -153,7 +153,7 @@ public class FilterController { public ResponseEntity fileSize(@ModelAttribute FileSizeRequest request) throws IOException, InterruptedException { MultipartFile inputFile = request.getFileInput(); - String fileSize = request.getFileSize(); + long fileSize = request.getFileSize(); String comparator = request.getComparator(); // Get the file size @@ -163,13 +163,13 @@ public class FilterController { // Perform the comparison switch (comparator) { case "Greater": - valid = actualFileSize > Long.parseLong(fileSize); + valid = actualFileSize > fileSize; break; case "Equal": - valid = actualFileSize == Long.parseLong(fileSize); + valid = actualFileSize == fileSize; break; case "Less": - valid = actualFileSize < Long.parseLong(fileSize); + valid = actualFileSize < fileSize; break; default: throw new IllegalArgumentException("Invalid comparator: " + comparator); diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java index 5d6ce4516..e628a98bb 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoRenameController.java @@ -47,7 +47,7 @@ public class AutoRenameController { public ResponseEntity extractHeader(@ModelAttribute ExtractHeaderRequest request) throws Exception { MultipartFile file = request.getFileInput(); - Boolean useFirstTextAsFallback = request.isUseFirstTextAsFallback(); + boolean useFirstTextAsFallback = Boolean.TRUE.equals(request.getUseFirstTextAsFallback()); PDDocument document = pdfDocumentFactory.load(file); PDFTextStripper reader = diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java index 4e976d12d..b7cb7541d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java @@ -113,7 +113,7 @@ public class AutoSplitPdfController { public ResponseEntity autoSplitPdf(@ModelAttribute AutoSplitPdfRequest request) throws IOException { MultipartFile file = request.getFileInput(); - boolean duplexMode = request.isDuplexMode(); + boolean duplexMode = Boolean.TRUE.equals(request.getDuplexMode()); PDDocument document = null; List splitDocuments = new ArrayList<>(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java index 67019559e..5a01ad103 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImageScansController.java @@ -18,14 +18,13 @@ import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -58,24 +57,11 @@ public class ExtractImageScansController { + " minimum contour area, and border size. Input:PDF Output:IMAGE/ZIP" + " Type:SIMO") public ResponseEntity extractImageScans( - @RequestBody( - description = "Form data containing file and extraction parameters", - required = true, - content = - @Content( - mediaType = "multipart/form-data", - schema = - @Schema( - implementation = - ExtractImageScansRequest - .class) // This should - // represent - // your form's - // structure - )) - ExtractImageScansRequest form) + @ModelAttribute ExtractImageScansRequest request) throws IOException, InterruptedException { - String fileName = form.getFileInput().getOriginalFilename(); + MultipartFile inputFile = request.getFileInput(); + + String fileName = inputFile.getOriginalFilename(); String extension = fileName.substring(fileName.lastIndexOf(".") + 1); List images = new ArrayList<>(); @@ -94,7 +80,7 @@ public class ExtractImageScansController { // Check if input file is a PDF if ("pdf".equalsIgnoreCase(extension)) { // Load PDF document - try (PDDocument document = pdfDocumentFactory.load(form.getFileInput())) { + try (PDDocument document = pdfDocumentFactory.load(inputFile)) { PDFRenderer pdfRenderer = new PDFRenderer(document); pdfRenderer.setSubsamplingAllowed(true); int pageCount = document.getNumberOfPages(); @@ -116,7 +102,7 @@ public class ExtractImageScansController { } } else { tempInputFile = Files.createTempFile("input_", "." + extension); - form.getFileInput().transferTo(tempInputFile); + inputFile.transferTo(tempInputFile); // Add input file path to images list images.add(tempInputFile.toString()); } @@ -136,15 +122,15 @@ public class ExtractImageScansController { images.get(i), tempDir.toString(), "--angle_threshold", - String.valueOf(form.getAngleThreshold()), + String.valueOf(request.getAngleThreshold()), "--tolerance", - String.valueOf(form.getTolerance()), + String.valueOf(request.getTolerance()), "--min_area", - String.valueOf(form.getMinArea()), + String.valueOf(request.getMinArea()), "--min_contour_area", - String.valueOf(form.getMinContourArea()), + String.valueOf(request.getMinContourArea()), "--border_size", - String.valueOf(form.getBorderSize()))); + String.valueOf(request.getBorderSize()))); // Run CLI command ProcessExecutorResult returnCode = diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java index 187eda305..e03916745 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ExtractImagesController.java @@ -64,7 +64,7 @@ public class ExtractImagesController { throws IOException, InterruptedException, ExecutionException { MultipartFile file = request.getFileInput(); String format = request.getFormat(); - boolean allowDuplicates = request.isAllowDuplicates(); + boolean allowDuplicates = Boolean.TRUE.equals(request.getAllowDuplicates()); PDDocument document = pdfDocumentFactory.load(file); // Determine if multithreading should be used based on PDF size or number of pages diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java index 10e4f6fdd..3e90132b6 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/MetadataController.java @@ -65,7 +65,7 @@ public class MetadataController { MultipartFile pdfFile = request.getFileInput(); // Extract metadata information - Boolean deleteAll = request.isDeleteAll(); + boolean deleteAll = Boolean.TRUE.equals(request.getDeleteAll()); String author = request.getAuthor(); String creationDate = request.getCreationDate(); String creator = request.getCreator(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java index 51ca9f9ff..40773ab0d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java @@ -43,7 +43,7 @@ public class OverlayImageController { MultipartFile imageFile = request.getImageFile(); float x = request.getX(); float y = request.getY(); - boolean everyPage = request.isEveryPage(); + boolean everyPage = Boolean.TRUE.equals(request.getEveryPage()); try { byte[] pdfBytes = pdfFile.getBytes(); byte[] imageBytes = imageFile.getBytes(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java index cdae7dfad..ae31bd01b 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java @@ -49,33 +49,30 @@ public class PageNumbersController { MultipartFile file = request.getFileInput(); String customMargin = request.getCustomMargin(); int position = request.getPosition(); - int startingNumber = request.getStartingNumber(); + int pageNumber = request.getStartingNumber(); String pagesToNumber = request.getPagesToNumber(); String customText = request.getCustomText(); - int pageNumber = startingNumber; + float fontSize = request.getFontSize(); + String fontType = request.getFontType(); + PDDocument document = pdfDocumentFactory.load(file); - float font_size = request.getFontSize(); - String font_type = request.getFontType(); float marginFactor; switch (customMargin.toLowerCase()) { case "small": marginFactor = 0.02f; break; - case "medium": - marginFactor = 0.035f; - break; case "large": marginFactor = 0.05f; break; case "x-large": marginFactor = 0.075f; break; + case "medium": default: marginFactor = 0.035f; break; } - float fontSize = font_size; if (pagesToNumber == null || pagesToNumber.isEmpty()) { pagesToNumber = "all"; } @@ -99,7 +96,7 @@ public class PageNumbersController { .replaceFirst("[.][^.]+$", "")); PDType1Font currentFont = - switch (font_type.toLowerCase()) { + switch (fontType.toLowerCase()) { case "courier" -> new PDType1Font(Standard14Fonts.FontName.COURIER); case "times" -> new PDType1Font(Standard14Fonts.FontName.TIMES_ROMAN); default -> new PDType1Font(Standard14Fonts.FontName.HELVETICA); diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java index 1a358b08e..01d9049df 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/RepairController.java @@ -40,9 +40,9 @@ public class RepairController { "This endpoint repairs a given PDF file by running qpdf command. The PDF is" + " first saved to a temporary location, repaired, read back, and then" + " returned as a response. Input:PDF Output:PDF Type:SISO") - public ResponseEntity repairPdf(@ModelAttribute PDFFile request) + public ResponseEntity repairPdf(@ModelAttribute PDFFile file) throws IOException, InterruptedException { - MultipartFile inputFile = request.getFileInput(); + MultipartFile inputFile = file.getFileInput(); // Save the uploaded file to a temporary location Path tempInputFile = Files.createTempFile("input_", ".pdf"); byte[] pdfBytes = null; diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ReplaceAndInvertColorController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ReplaceAndInvertColorController.java index 865724a74..85fb7cfc3 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ReplaceAndInvertColorController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ReplaceAndInvertColorController.java @@ -31,18 +31,18 @@ public class ReplaceAndInvertColorController { @Operation( summary = "Replace-Invert Color PDF", description = - "This endpoint accepts a PDF file and option of invert all colors or replace text and background colors. Input:PDF Output:PDF Type:SISO") + "This endpoint accepts a PDF file and option of invert all colors or replace" + + " text and background colors. Input:PDF Output:PDF Type:SISO") public ResponseEntity replaceAndInvertColor( - @ModelAttribute ReplaceAndInvertColorRequest replaceAndInvertColorRequest) - throws IOException { + @ModelAttribute ReplaceAndInvertColorRequest request) throws IOException { InputStreamResource resource = replaceAndInvertColorService.replaceAndInvertColor( - replaceAndInvertColorRequest.getFileInput(), - replaceAndInvertColorRequest.getReplaceAndInvertOption(), - replaceAndInvertColorRequest.getHighContrastColorCombination(), - replaceAndInvertColorRequest.getBackGroundColor(), - replaceAndInvertColorRequest.getTextColor()); + request.getFileInput(), + request.getReplaceAndInvertOption(), + request.getHighContrastColorCombination(), + request.getBackGroundColor(), + request.getTextColor()); // Return the modified PDF as a downloadable file return ResponseEntity.ok() diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java b/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java index 400650be3..f6aab4527 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/ShowJavascript.java @@ -36,8 +36,8 @@ public class ShowJavascript { @Operation( summary = "Grabs all JS from a PDF and returns a single JS file with all code", description = "desc. Input:PDF Output:JS Type:SISO") - public ResponseEntity extractHeader(@ModelAttribute PDFFile request) throws Exception { - MultipartFile inputFile = request.getFileInput(); + public ResponseEntity extractHeader(@ModelAttribute PDFFile file) throws Exception { + MultipartFile inputFile = file.getFileInput(); String script = ""; try (PDDocument document = pdfDocumentFactory.load(inputFile)) { diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java b/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java index c0f341782..90fd03dea 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java @@ -63,14 +63,16 @@ public class PasswordController { String ownerPassword = request.getOwnerPassword(); String password = request.getPassword(); int keyLength = request.getKeyLength(); - boolean preventAssembly = request.isPreventAssembly(); - boolean preventExtractContent = request.isPreventExtractContent(); - boolean preventExtractForAccessibility = request.isPreventExtractForAccessibility(); - boolean preventFillInForm = request.isPreventFillInForm(); - boolean preventModify = request.isPreventModify(); - boolean preventModifyAnnotations = request.isPreventModifyAnnotations(); - boolean preventPrinting = request.isPreventPrinting(); - boolean preventPrintingFaithful = request.isPreventPrintingFaithful(); + boolean preventAssembly = Boolean.TRUE.equals(request.getPreventAssembly()); + boolean preventExtractContent = Boolean.TRUE.equals(request.getPreventExtractContent()); + boolean preventExtractForAccessibility = + Boolean.TRUE.equals(request.getPreventExtractForAccessibility()); + boolean preventFillInForm = Boolean.TRUE.equals(request.getPreventFillInForm()); + boolean preventModify = Boolean.TRUE.equals(request.getPreventModify()); + boolean preventModifyAnnotations = + Boolean.TRUE.equals(request.getPreventModifyAnnotations()); + boolean preventPrinting = Boolean.TRUE.equals(request.getPreventPrinting()); + boolean preventPrintingFaithful = Boolean.TRUE.equals(request.getPreventPrintingFaithful()); PDDocument document = pdfDocumentFactory.load(fileInput); AccessPermission ap = new AccessPermission(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java b/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java index df5e2499e..72571e2d7 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/RedactController.java @@ -75,7 +75,7 @@ public class RedactController { redactPages(request, document, allPages); redactAreas(redactionAreas, document, allPages); - if (request.isConvertPDFToImage()) { + if (Boolean.TRUE.equals(request.getConvertPDFToImage())) { PDDocument convertedPdf = PdfUtils.convertPdfToPdfImage(document); document.close(); document = convertedPdf; @@ -180,7 +180,6 @@ public class RedactController { } } - private List getPageNumbers(ManualRedactPdfRequest request, int pagesCount) { String pageNumbersInput = request.getPageNumbers(); String[] parsedPageNumbers = @@ -201,11 +200,11 @@ public class RedactController { throws Exception { MultipartFile file = request.getFileInput(); String listOfTextString = request.getListOfText(); - boolean useRegex = request.isUseRegex(); - boolean wholeWordSearchBool = request.isWholeWordSearch(); + boolean useRegex = Boolean.TRUE.equals(request.getUseRegex()); + boolean wholeWordSearchBool = Boolean.TRUE.equals(request.getWholeWordSearch()); String colorString = request.getRedactColor(); float customPadding = request.getCustomPadding(); - boolean convertPDFToImage = request.isConvertPDFToImage(); + boolean convertPDFToImage = Boolean.TRUE.equals(request.getConvertPDFToImage()); String[] listOfText = listOfTextString.split("\n"); PDDocument document = pdfDocumentFactory.load(file); diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java b/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java index 42dbfef64..9be4cacbc 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java @@ -46,12 +46,12 @@ public class SanitizeController { public ResponseEntity sanitizePDF(@ModelAttribute SanitizePdfRequest request) throws IOException { MultipartFile inputFile = request.getFileInput(); - boolean removeJavaScript = request.isRemoveJavaScript(); - boolean removeEmbeddedFiles = request.isRemoveEmbeddedFiles(); - boolean removeXMPMetadata = request.isRemoveXMPMetadata(); - boolean removeMetadata = request.isRemoveMetadata(); - boolean removeLinks = request.isRemoveLinks(); - boolean removeFonts = request.isRemoveFonts(); + boolean removeJavaScript = Boolean.TRUE.equals(request.getRemoveJavaScript()); + boolean removeEmbeddedFiles = Boolean.TRUE.equals(request.getRemoveEmbeddedFiles()); + boolean removeXMPMetadata = Boolean.TRUE.equals(request.getRemoveXMPMetadata()); + boolean removeMetadata = Boolean.TRUE.equals(request.getRemoveMetadata()); + boolean removeLinks = Boolean.TRUE.equals(request.getRemoveLinks()); + boolean removeFonts = Boolean.TRUE.equals(request.getRemoveFonts()); PDDocument document = pdfDocumentFactory.load(inputFile, true); if (removeJavaScript) { diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java b/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java index 361bc1e3f..67f776408 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/ValidateSignatureController.java @@ -1,5 +1,6 @@ package stirling.software.SPDF.controller.api.security; +import java.beans.PropertyEditorSupport; import java.io.ByteArrayInputStream; import java.io.IOException; import java.security.cert.CertificateException; @@ -23,6 +24,8 @@ import org.bouncycastle.cms.jcajce.JcaSimpleSignerInfoVerifierBuilder; import org.bouncycastle.util.Store; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -48,6 +51,18 @@ public class ValidateSignatureController { private final CustomPDFDocumentFactory pdfDocumentFactory; private final CertificateValidationService certValidationService; + @InitBinder + public void initBinder(WebDataBinder binder) { + binder.registerCustomEditor( + MultipartFile.class, + new PropertyEditorSupport() { + @Override + public void setAsText(String text) throws IllegalArgumentException { + setValue(null); + } + }); + } + @Operation( summary = "Validate PDF Digital Signature", description = @@ -58,12 +73,12 @@ public class ValidateSignatureController { @ModelAttribute SignatureValidationRequest request) throws IOException { List results = new ArrayList<>(); MultipartFile file = request.getFileInput(); + MultipartFile certFile = request.getCertFile(); // Load custom certificate if provided X509Certificate customCert = null; - if (request.getCertFile() != null && !request.getCertFile().isEmpty()) { - try (ByteArrayInputStream certStream = - new ByteArrayInputStream(request.getCertFile().getBytes())) { + if (certFile != null && !certFile.isEmpty()) { + try (ByteArrayInputStream certStream = new ByteArrayInputStream(certFile.getBytes())) { CertificateFactory cf = CertificateFactory.getInstance("X.509"); customCert = (X509Certificate) cf.generateCertificate(certStream); } catch (CertificateException e) { diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java index c477a88f8..14d23ac09 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java @@ -2,6 +2,7 @@ package stirling.software.SPDF.controller.api.security; import java.awt.*; import java.awt.image.BufferedImage; +import java.beans.PropertyEditorSupport; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -24,6 +25,8 @@ import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; import org.apache.pdfbox.util.Matrix; import org.springframework.core.io.ClassPathResource; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -49,6 +52,18 @@ public class WatermarkController { private final CustomPDFDocumentFactory pdfDocumentFactory; + @InitBinder + public void initBinder(WebDataBinder binder) { + binder.registerCustomEditor( + MultipartFile.class, + new PropertyEditorSupport() { + @Override + public void setAsText(String text) throws IllegalArgumentException { + setValue(null); + } + }); + } + @PostMapping(consumes = "multipart/form-data", value = "/add-watermark") @Operation( summary = "Add watermark to a PDF file", @@ -69,7 +84,7 @@ public class WatermarkController { int widthSpacer = request.getWidthSpacer(); int heightSpacer = request.getHeightSpacer(); String customColor = request.getCustomColor(); - boolean convertPdfToImage = request.isConvertPDFToImage(); + boolean convertPdfToImage = Boolean.TRUE.equals(request.getConvertPDFToImage()); // Load the input PDF PDDocument document = pdfDocumentFactory.load(pdfFile); diff --git a/src/main/java/stirling/software/SPDF/model/api/Email.java b/src/main/java/stirling/software/SPDF/model/api/Email.java index 21b5152e5..6048195e2 100644 --- a/src/main/java/stirling/software/SPDF/model/api/Email.java +++ b/src/main/java/stirling/software/SPDF/model/api/Email.java @@ -4,7 +4,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import io.swagger.v3.oas.annotations.media.Schema; - import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; diff --git a/src/main/java/stirling/software/SPDF/model/api/GeneralFile.java b/src/main/java/stirling/software/SPDF/model/api/GeneralFile.java index 068978fac..e3ffc8c8b 100644 --- a/src/main/java/stirling/software/SPDF/model/api/GeneralFile.java +++ b/src/main/java/stirling/software/SPDF/model/api/GeneralFile.java @@ -11,6 +11,9 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode public class GeneralFile { - @Schema(description = "The input file") + @Schema( + description = "The input file", + requiredMode = Schema.RequiredMode.REQUIRED, + format = "binary") private MultipartFile fileInput; } diff --git a/src/main/java/stirling/software/SPDF/model/api/HandleDataRequest.java b/src/main/java/stirling/software/SPDF/model/api/HandleDataRequest.java index 27a0dc3bb..7f425dc04 100644 --- a/src/main/java/stirling/software/SPDF/model/api/HandleDataRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/HandleDataRequest.java @@ -11,9 +11,12 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode public class HandleDataRequest { - @Schema(description = "The input files") + @Schema(description = "The input files", requiredMode = Schema.RequiredMode.REQUIRED) private MultipartFile[] fileInput; - @Schema(description = "JSON String") + @Schema( + description = "JSON String", + defaultValue = "{}", + requiredMode = Schema.RequiredMode.REQUIRED) private String json; } diff --git a/src/main/java/stirling/software/SPDF/model/api/ImageFile.java b/src/main/java/stirling/software/SPDF/model/api/ImageFile.java index 9719e2372..bd51ac8db 100644 --- a/src/main/java/stirling/software/SPDF/model/api/ImageFile.java +++ b/src/main/java/stirling/software/SPDF/model/api/ImageFile.java @@ -10,6 +10,9 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode public class ImageFile { - @Schema(description = "The input image file") + @Schema( + description = "The input image file", + requiredMode = Schema.RequiredMode.REQUIRED, + format = "binary") private MultipartFile fileInput; } diff --git a/src/main/java/stirling/software/SPDF/model/api/MultiplePDFFiles.java b/src/main/java/stirling/software/SPDF/model/api/MultiplePDFFiles.java index fbca980e2..b56a52c7a 100644 --- a/src/main/java/stirling/software/SPDF/model/api/MultiplePDFFiles.java +++ b/src/main/java/stirling/software/SPDF/model/api/MultiplePDFFiles.java @@ -10,6 +10,6 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode public class MultiplePDFFiles { - @Schema(description = "The input PDF files", type = "array", format = "binary") + @Schema(description = "The input PDF files", requiredMode = Schema.RequiredMode.REQUIRED) private MultipartFile[] fileInput; } diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java b/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java index a2702c3f8..2dcf3731e 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFComparison.java @@ -11,6 +11,7 @@ public class PDFComparison extends PDFFile { @Schema( description = "The comparison type, accepts Greater, Equal, Less than", - allowableValues = {"Greater", "Equal", "Less"}) + allowableValues = {"Greater", "Equal", "Less"}, + requiredMode = Schema.RequiredMode.REQUIRED) private String comparator; } diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFComparisonAndCount.java b/src/main/java/stirling/software/SPDF/model/api/PDFComparisonAndCount.java index d850b94ae..32037ea9f 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFComparisonAndCount.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFComparisonAndCount.java @@ -8,6 +8,6 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) public class PDFComparisonAndCount extends PDFComparison { - @Schema(description = "Count") - private String pageCount; + @Schema(description = "Count", requiredMode = Schema.RequiredMode.REQUIRED, defaultValue = "0") + private int pageCount; } diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFExtractImagesRequest.java b/src/main/java/stirling/software/SPDF/model/api/PDFExtractImagesRequest.java index 9983d32ea..272c5c8b1 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFExtractImagesRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFExtractImagesRequest.java @@ -11,6 +11,8 @@ public class PDFExtractImagesRequest extends PDFWithImageFormatRequest { @Schema( description = - "Boolean to enable/disable the saving of duplicate images, true to enable duplicates") - private boolean allowDuplicates; + "Boolean to enable/disable the saving of duplicate images, true to enable" + + " duplicates", + defaultValue = "false") + private Boolean allowDuplicates; } diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFFile.java b/src/main/java/stirling/software/SPDF/model/api/PDFFile.java index 930f9b0ff..c6284ab99 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFFile.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFFile.java @@ -12,6 +12,10 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @EqualsAndHashCode public class PDFFile { - @Schema(description = "The input PDF file", format = "binary") + @Schema( + description = "The input PDF file", + requiredMode = Schema.RequiredMode.REQUIRED, + contentMediaType = "application/pdf", + format = "binary") private MultipartFile fileInput; } diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java b/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java index 34f15c135..e269f91ca 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFWithImageFormatRequest.java @@ -11,6 +11,8 @@ public class PDFWithImageFormatRequest extends PDFFile { @Schema( description = "The output image format e.g., 'png', 'jpeg', or 'gif'", - allowableValues = {"png", "jpeg", "gif"}) + allowableValues = {"png", "jpeg", "gif"}, + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "png") private String format; } diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java index 39ace7f1e..dd73f9763 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageNums.java @@ -21,9 +21,9 @@ public class PDFWithPageNums extends PDFFile { description = "The pages to select, Supports ranges (e.g., '1,3,5-9'), or 'all' or functions in the" + " format 'an+b' where 'a' is the multiplier of the page number 'n', and 'b' is a" - + " constant (e.g., '2n+1', '3n', '6n-5')\"", + + " constant (e.g., '2n+1', '3n', '6n-5')", defaultValue = "all", - requiredMode = RequiredMode.NOT_REQUIRED) + requiredMode = RequiredMode.REQUIRED) private String pageNumbers; @Hidden diff --git a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java index 1cb0e11a7..81f1eedb9 100644 --- a/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java +++ b/src/main/java/stirling/software/SPDF/model/api/PDFWithPageSize.java @@ -11,7 +11,9 @@ public class PDFWithPageSize extends PDFFile { @Schema( description = - "The scale of pages in the output PDF. Acceptable values are A0-A6, LETTER, LEGAL, KEEP.", + "The scale of pages in the output PDF. Acceptable values are A0-A6, LETTER," + + " LEGAL, KEEP.", + requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"A0", "A1", "A2", "A3", "A4", "A5", "A6", "LETTER", "LEGAL", "KEEP"}) private String pageSize; } diff --git a/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java b/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java index 03930009e..b6a619d53 100644 --- a/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/SplitPdfByChaptersRequest.java @@ -8,12 +8,22 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = false) public class SplitPdfByChaptersRequest extends PDFFile { - @Schema(description = "Whether to include Metadata or not", example = "true") + @Schema( + description = "Whether to include Metadata or not", + defaultValue = "true", + requiredMode = Schema.RequiredMode.REQUIRED) private Boolean includeMetadata; - @Schema(description = "Whether to allow duplicates or not", example = "true") + @Schema( + description = "Whether to allow duplicates or not", + defaultValue = "true", + requiredMode = Schema.RequiredMode.REQUIRED) private Boolean allowDuplicates; - @Schema(description = "Maximum bookmark level required", example = "2") + @Schema( + description = "Maximum bookmark level required", + minimum = "0", + defaultValue = "2", + requiredMode = Schema.RequiredMode.REQUIRED) private Integer bookmarkLevel; } diff --git a/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java b/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java index e8557c692..ca8aad091 100644 --- a/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/SplitPdfBySectionsRequest.java @@ -8,12 +8,23 @@ import lombok.EqualsAndHashCode; @Data @EqualsAndHashCode(callSuper = true) public class SplitPdfBySectionsRequest extends PDFFile { - @Schema(description = "Number of horizontal divisions for each PDF page", example = "2") + @Schema( + description = "Number of horizontal divisions for each PDF page", + defaultValue = "0", + minimum = "0", + requiredMode = Schema.RequiredMode.REQUIRED) private int horizontalDivisions; - @Schema(description = "Number of vertical divisions for each PDF page", example = "2") + @Schema( + description = "Number of vertical divisions for each PDF page", + defaultValue = "1", + minimum = "0", + requiredMode = Schema.RequiredMode.REQUIRED) private int verticalDivisions; - @Schema(description = "Merge the split documents into a single PDF", example = "true") - private boolean merge; + @Schema( + description = "Merge the split documents into a single PDF", + defaultValue = "true", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean merge; } diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java index f1d04adc2..5481423ac 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertPDFToMarkdown.java @@ -23,9 +23,9 @@ public class ConvertPDFToMarkdown { summary = "Convert PDF to Markdown", description = "This endpoint converts a PDF file to Markdown format. Input:PDF Output:Markdown Type:SISO") - public ResponseEntity processPdfToMarkdown(@ModelAttribute PDFFile request) + public ResponseEntity processPdfToMarkdown(@ModelAttribute PDFFile file) throws Exception { - MultipartFile inputFile = request.getFileInput(); + MultipartFile inputFile = file.getFileInput(); PDFToFile pdfToFile = new PDFToFile(); return pdfToFile.processPdfToMarkdown(inputFile); } diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToImageRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToImageRequest.java index 5116f19c7..149676946 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToImageRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToImageRequest.java @@ -5,33 +5,38 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; -import stirling.software.SPDF.model.api.PDFFile; +import stirling.software.SPDF.model.api.PDFWithPageNums; @Data @EqualsAndHashCode(callSuper = true) -public class ConvertToImageRequest extends PDFFile { +public class ConvertToImageRequest extends PDFWithPageNums { @Schema( description = "The output image format", - allowableValues = {"png", "jpeg", "jpg", "gif", "webp"}) + defaultValue = "png", + allowableValues = {"png", "jpeg", "jpg", "gif", "webp"}, + requiredMode = Schema.RequiredMode.REQUIRED) private String imageFormat; @Schema( description = - "Choose between a single image containing all pages or separate images for each page", - allowableValues = {"single", "multiple"}) + "Choose between a single image containing all pages or separate images for each" + + " page", + defaultValue = "multiple", + allowableValues = {"single", "multiple"}, + requiredMode = Schema.RequiredMode.REQUIRED) private String singleOrMultiple; - @Schema( - description = - "The pages to select, Supports ranges (e.g., '1,3,5-9'), or 'all' or functions in the format 'an+b' where 'a' is the multiplier of the page number 'n', and 'b' is a constant (e.g., '2n+1', '3n', '6n-5')\"") - private String pageNumbers; - @Schema( description = "The color type of the output image(s)", - allowableValues = {"color", "greyscale", "blackwhite"}) + defaultValue = "color", + allowableValues = {"color", "greyscale", "blackwhite"}, + requiredMode = Schema.RequiredMode.REQUIRED) private String colorType; - @Schema(description = "The DPI (dots per inch) for the output image(s)") - private String dpi; + @Schema( + description = "The DPI (dots per inch) for the output image(s)", + defaultValue = "300", + requiredMode = Schema.RequiredMode.REQUIRED) + private Integer dpi; } diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToPdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToPdfRequest.java index 7630f746a..c3b059fe0 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToPdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/ConvertToPdfRequest.java @@ -11,21 +11,28 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode public class ConvertToPdfRequest { - @Schema(description = "The input images to be converted to a PDF file") + @Schema( + description = "The input images to be converted to a PDF file", + requiredMode = Schema.RequiredMode.REQUIRED) private MultipartFile[] fileInput; @Schema( description = "Option to determine how the image will fit onto the page", + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "fillPage", allowableValues = {"fillPage", "fitDocumentToImage", "maintainAspectRatio"}) private String fitOption; @Schema( description = "The color type of the output image(s)", + defaultValue = "color", + requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"color", "greyscale", "blackwhite"}) private String colorType; @Schema( description = "Whether to automatically rotate the images to better fit the PDF page", - example = "true") - private boolean autoRotate; + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "false") + private Boolean autoRotate; } diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/HTMLToPdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/HTMLToPdfRequest.java index 4bd328566..822c5f898 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/HTMLToPdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/HTMLToPdfRequest.java @@ -13,6 +13,7 @@ public class HTMLToPdfRequest extends PDFFile { @Schema( description = "Zoom level for displaying the website. Default is '1'.", + requiredMode = Schema.RequiredMode.REQUIRED, defaultValue = "1") private float zoom; } diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToBookRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToBookRequest.java index 0d518e572..ab48ce2df 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToBookRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToBookRequest.java @@ -13,6 +13,7 @@ public class PdfToBookRequest extends PDFFile { @Schema( description = "The output Ebook format", + requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = { "epub", "mobi", "azw3", "docx", "rtf", "txt", "html", "lit", "fb2", "pdb", "lrf" }) diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPdfARequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPdfARequest.java index c48e53268..0ce91a337 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPdfARequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPdfARequest.java @@ -13,6 +13,7 @@ public class PdfToPdfARequest extends PDFFile { @Schema( description = "The output PDF/A type", + requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"pdfa", "pdfa-1"}) private String outputFormat; } diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPresentationRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPresentationRequest.java index 68c14a1f0..aa23eb533 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPresentationRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToPresentationRequest.java @@ -13,6 +13,7 @@ public class PdfToPresentationRequest extends PDFFile { @Schema( description = "The output Presentation format", + requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"ppt", "pptx", "odp"}) private String outputFormat; } diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToTextOrRTFRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToTextOrRTFRequest.java index 5d3ab2ab2..7d4f9f098 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToTextOrRTFRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToTextOrRTFRequest.java @@ -13,6 +13,7 @@ public class PdfToTextOrRTFRequest extends PDFFile { @Schema( description = "The output Text or RTF format", + requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"rtf", "txt"}) private String outputFormat; } diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToWordRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToWordRequest.java index c0bed0637..f2613e339 100644 --- a/src/main/java/stirling/software/SPDF/model/api/converters/PdfToWordRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/converters/PdfToWordRequest.java @@ -13,6 +13,7 @@ public class PdfToWordRequest extends PDFFile { @Schema( description = "The output Word document format", + requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"doc", "docx", "odt"}) private String outputFormat; } diff --git a/src/main/java/stirling/software/SPDF/model/api/filter/ContainsTextRequest.java b/src/main/java/stirling/software/SPDF/model/api/filter/ContainsTextRequest.java index 147badc37..0435e5835 100644 --- a/src/main/java/stirling/software/SPDF/model/api/filter/ContainsTextRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/filter/ContainsTextRequest.java @@ -11,6 +11,9 @@ import stirling.software.SPDF.model.api.PDFWithPageNums; @EqualsAndHashCode(callSuper = true) public class ContainsTextRequest extends PDFWithPageNums { - @Schema(description = "The text to check for", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema( + description = "The text to check for", + defaultValue = "text", + requiredMode = Schema.RequiredMode.REQUIRED) private String text; } diff --git a/src/main/java/stirling/software/SPDF/model/api/filter/FileSizeRequest.java b/src/main/java/stirling/software/SPDF/model/api/filter/FileSizeRequest.java index 957951395..a3c57077d 100644 --- a/src/main/java/stirling/software/SPDF/model/api/filter/FileSizeRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/filter/FileSizeRequest.java @@ -11,6 +11,9 @@ import stirling.software.SPDF.model.api.PDFComparison; @EqualsAndHashCode(callSuper = true) public class FileSizeRequest extends PDFComparison { - @Schema(description = "File Size", requiredMode = Schema.RequiredMode.REQUIRED) - private String fileSize; + @Schema( + description = "Size of the file in bytes", + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "0") + private long fileSize; } diff --git a/src/main/java/stirling/software/SPDF/model/api/filter/PageRotationRequest.java b/src/main/java/stirling/software/SPDF/model/api/filter/PageRotationRequest.java index 2a183deb7..05fd10c31 100644 --- a/src/main/java/stirling/software/SPDF/model/api/filter/PageRotationRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/filter/PageRotationRequest.java @@ -11,6 +11,9 @@ import stirling.software.SPDF.model.api.PDFComparison; @EqualsAndHashCode(callSuper = true) public class PageRotationRequest extends PDFComparison { - @Schema(description = "Rotation in degrees", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema( + description = "Rotation in degrees", + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "0") private int rotation; } diff --git a/src/main/java/stirling/software/SPDF/model/api/filter/PageSizeRequest.java b/src/main/java/stirling/software/SPDF/model/api/filter/PageSizeRequest.java index 1d89ef296..2fa74f040 100644 --- a/src/main/java/stirling/software/SPDF/model/api/filter/PageSizeRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/filter/PageSizeRequest.java @@ -11,6 +11,10 @@ import stirling.software.SPDF.model.api.PDFComparison; @EqualsAndHashCode(callSuper = true) public class PageSizeRequest extends PDFComparison { - @Schema(description = "Standard Page Size", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema( + description = "Standard Page Size", + allowableValues = {"A0", "A1", "A2", "A3", "A4", "A5", "A6", "LETTER", "LEGAL"}, + defaultValue = "A4", + requiredMode = Schema.RequiredMode.REQUIRED) private String standardPageSize; } diff --git a/src/main/java/stirling/software/SPDF/model/api/general/MergeMultiplePagesRequest.java b/src/main/java/stirling/software/SPDF/model/api/general/MergeMultiplePagesRequest.java index b8beb9ff0..4bd41e400 100644 --- a/src/main/java/stirling/software/SPDF/model/api/general/MergeMultiplePagesRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/general/MergeMultiplePagesRequest.java @@ -13,10 +13,12 @@ public class MergeMultiplePagesRequest extends PDFFile { @Schema( description = "The number of pages to fit onto a single sheet in the output PDF.", - type = "integer", + type = "number", + defaultValue = "2", + requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"2", "3", "4", "9", "16"}) private int pagesPerSheet; @Schema(description = "Boolean for if you wish to add border around the pages") - private boolean addBorder; + private Boolean addBorder; } diff --git a/src/main/java/stirling/software/SPDF/model/api/general/MergePdfsRequest.java b/src/main/java/stirling/software/SPDF/model/api/general/MergePdfsRequest.java index 9b97d88dd..0ed4fcfa7 100644 --- a/src/main/java/stirling/software/SPDF/model/api/general/MergePdfsRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/general/MergePdfsRequest.java @@ -20,12 +20,16 @@ public class MergePdfsRequest extends MultiplePDFFiles { "byDateCreated", "byPDFTitle" }, + requiredMode = Schema.RequiredMode.REQUIRED, defaultValue = "orderProvided") private String sortType = "orderProvided"; @Schema( description = - "Flag indicating whether to remove certification signatures from the merged PDF. If true, all certification signatures will be removed from the final merged document.", - example = "true") - private boolean isRemoveCertSign; + "Flag indicating whether to remove certification signatures from the merged" + + " PDF. If true, all certification signatures will be removed from the" + + " final merged document.", + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "true") + private Boolean removeCertSign; } diff --git a/src/main/java/stirling/software/SPDF/model/api/general/OverlayPdfsRequest.java b/src/main/java/stirling/software/SPDF/model/api/general/OverlayPdfsRequest.java index 1bad80425..528e57844 100644 --- a/src/main/java/stirling/software/SPDF/model/api/general/OverlayPdfsRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/general/OverlayPdfsRequest.java @@ -15,21 +15,32 @@ public class OverlayPdfsRequest extends PDFFile { @Schema( description = - "An array of PDF files to be used as overlays on the base PDF. The order in these files is applied based on the selected mode.") + "An array of PDF files to be used as overlays on the base PDF. The order in" + + " these files is applied based on the selected mode.", + requiredMode = Schema.RequiredMode.REQUIRED) private MultipartFile[] overlayFiles; @Schema( description = - "The mode of overlaying: 'SequentialOverlay' for sequential application, 'InterleavedOverlay' for round-robin application, 'FixedRepeatOverlay' for fixed repetition based on provided counts", + "The mode of overlaying: 'SequentialOverlay' for sequential application," + + " 'InterleavedOverlay' for round-robin application, 'FixedRepeatOverlay'" + + " for fixed repetition based on provided counts", + allowableValues = {"SequentialOverlay", "InterleavedOverlay", "FixedRepeatOverlay"}, requiredMode = Schema.RequiredMode.REQUIRED) private String overlayMode; @Schema( description = - "An array of integers specifying the number of times each corresponding overlay file should be applied in the 'FixedRepeatOverlay' mode. This should match the length of the overlayFiles array.", + "An array of integers specifying the number of times each corresponding overlay" + + " file should be applied in the 'FixedRepeatOverlay' mode. This should" + + " match the length of the overlayFiles array.", requiredMode = Schema.RequiredMode.NOT_REQUIRED) private int[] counts; - @Schema(description = "Overlay position 0 is Foregound, 1 is Background") + @Schema( + description = "Overlay position 0 is Foregound, 1 is Background", + allowableValues = {"0", "1"}, + requiredMode = Schema.RequiredMode.REQUIRED, + type = "number") private int overlayPosition; } diff --git a/src/main/java/stirling/software/SPDF/model/api/general/RotatePDFRequest.java b/src/main/java/stirling/software/SPDF/model/api/general/RotatePDFRequest.java index ac13e4bf4..fae64edb6 100644 --- a/src/main/java/stirling/software/SPDF/model/api/general/RotatePDFRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/general/RotatePDFRequest.java @@ -14,6 +14,8 @@ public class RotatePDFRequest extends PDFFile { @Schema( description = "The angle by which to rotate the PDF file. This should be a multiple of 90.", - example = "90") + requiredMode = Schema.RequiredMode.REQUIRED, + allowableValues = {"0", "90", "180", "270"}, + defaultValue = "90") private Integer angle; } diff --git a/src/main/java/stirling/software/SPDF/model/api/general/ScalePagesRequest.java b/src/main/java/stirling/software/SPDF/model/api/general/ScalePagesRequest.java index bba2141ca..653697f4e 100644 --- a/src/main/java/stirling/software/SPDF/model/api/general/ScalePagesRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/general/ScalePagesRequest.java @@ -12,7 +12,11 @@ import stirling.software.SPDF.model.api.PDFWithPageSize; public class ScalePagesRequest extends PDFWithPageSize { @Schema( + minimum = "0", + defaultValue = "1", + requiredMode = Schema.RequiredMode.REQUIRED, description = - "The scale of the content on the pages of the output PDF. Acceptable values are floats.") + "The scale of the content on the pages of the output PDF. Acceptable values are" + + " floats.") private float scaleFactor; } diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/AddPageNumbersRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/AddPageNumbersRequest.java index b67d76531..5f0f71695 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/AddPageNumbersRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/AddPageNumbersRequest.java @@ -22,6 +22,7 @@ public class AddPageNumbersRequest extends PDFWithPageNums { @Schema( description = "Font size for page numbers", minimum = "1", + defaultValue = "12", requiredMode = RequiredMode.REQUIRED) private float fontSize; @@ -33,15 +34,18 @@ public class AddPageNumbersRequest extends PDFWithPageNums { @Schema( description = - "Position: 1-9 representing positions on the page (1=top-left, 5=center, 9=bottom-right)", - minimum = "1", - maximum = "9", + "Position: 1-9 representing positions on the page (1=top-left, 2=top-center," + + " 3=top-right, 4=middle-left, 5=middle-center, 6=middle-right," + + " 7=bottom-left, 8=bottom-center, 9=bottom-right)", + allowableValues = {"1", "2", "3", "4", "5", "6", "7", "8", "9"}, + defaultValue = "8", requiredMode = RequiredMode.REQUIRED) private int position; @Schema( description = "Starting number for page numbering", minimum = "1", + defaultValue = "1", requiredMode = RequiredMode.REQUIRED) private int startingNumber; @@ -53,7 +57,8 @@ public class AddPageNumbersRequest extends PDFWithPageNums { @Schema( description = - "Custom text pattern. Available variables: {n}=current page number, {total}=total pages, {filename}=original filename", + "Custom text pattern. Available variables: {n}=current page number," + + " {total}=total pages, {filename}=original filename", example = "Page {n} of {total}", defaultValue = "{n}", requiredMode = RequiredMode.NOT_REQUIRED) diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/AddStampRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/AddStampRequest.java index b320b7151..48d470a5a 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/AddStampRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/AddStampRequest.java @@ -19,51 +19,69 @@ public class AddStampRequest extends PDFWithPageNums { requiredMode = Schema.RequiredMode.REQUIRED) private String stampType; - @Schema(description = "The stamp text") + @Schema(description = "The stamp text", defaultValue = "Stirling Software") private String stampText; @Schema(description = "The stamp image") private MultipartFile stampImage; @Schema( - description = "The selected alphabet", + description = "The selected alphabet of the stamp text", allowableValues = {"roman", "arabic", "japanese", "korean", "chinese"}, defaultValue = "roman") private String alphabet = "roman"; - @Schema(description = "The font size of the stamp text", example = "30") - private float fontSize = 30; + @Schema( + description = "The font size of the stamp text and image", + defaultValue = "30", + requiredMode = Schema.RequiredMode.REQUIRED) + private float fontSize; - @Schema(description = "The rotation of the stamp in degrees", example = "0") - private float rotation = 0; + @Schema( + description = "The rotation of the stamp in degrees", + defaultValue = "0", + requiredMode = Schema.RequiredMode.REQUIRED) + private float rotation; - @Schema(description = "The opacity of the stamp (0.0 - 1.0)", example = "0.5") + @Schema( + description = "The opacity of the stamp (0.0 - 1.0)", + defaultValue = "0.5", + requiredMode = Schema.RequiredMode.REQUIRED) private float opacity; @Schema( description = - "Position for stamp placement based on a 1-9 grid (1: bottom-left, 2: bottom-center, ..., 9: top-right)", - example = "1") + "Position for stamp placement based on a 1-9 grid (1: bottom-left, 2: bottom-center," + + " 3: bottom-right, 4: middle-left, 5: middle-center, 6: middle-right," + + " 7: top-left, 8: top-center, 9: top-right)", + allowableValues = {"1", "2", "3", "4", "5", "6", "7", "8", "9"}, + defaultValue = "5", + requiredMode = Schema.RequiredMode.REQUIRED) private int position; @Schema( description = - "Override X coordinate for stamp placement. If set, it will override the position-based calculation. Negative value means no override.", - example = "-1") - private float overrideX = -1; // Default to -1 indicating no override + "Override X coordinate for stamp placement. If set, it will override the" + + " position-based calculation. Negative value means no override.", + defaultValue = "-1", + requiredMode = Schema.RequiredMode.REQUIRED) + private float overrideX; // Default to -1 indicating no override @Schema( description = - "Override Y coordinate for stamp placement. If set, it will override the position-based calculation. Negative value means no override.", - example = "-1") - private float overrideY = -1; // Default to -1 indicating no override + "Override Y coordinate for stamp placement. If set, it will override the" + + " position-based calculation. Negative value means no override.", + defaultValue = "-1", + requiredMode = Schema.RequiredMode.REQUIRED) + private float overrideY; // Default to -1 indicating no override @Schema( description = "Specifies the margin size for the stamp.", allowableValues = {"small", "medium", "large", "x-large"}, - defaultValue = "medium") - private String customMargin = "medium"; + defaultValue = "medium", + requiredMode = Schema.RequiredMode.REQUIRED) + private String customMargin; - @Schema(description = "The color for stamp", defaultValue = "#d3d3d3") - private String customColor = "#d3d3d3"; + @Schema(description = "The color of the stamp text", defaultValue = "#d3d3d3") + private String customColor; } diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/AutoSplitPdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/AutoSplitPdfRequest.java index bc4a0f5c8..ff13c4038 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/AutoSplitPdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/AutoSplitPdfRequest.java @@ -16,5 +16,5 @@ public class AutoSplitPdfRequest extends PDFFile { "Flag indicating if the duplex mode is active, where the page after the divider also gets removed.", requiredMode = Schema.RequiredMode.NOT_REQUIRED, defaultValue = "false") - private boolean duplexMode; + private Boolean duplexMode; } diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/ExtractHeaderRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/ExtractHeaderRequest.java index 3f886fcdc..641833b77 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/ExtractHeaderRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/ExtractHeaderRequest.java @@ -16,5 +16,5 @@ public class ExtractHeaderRequest extends PDFFile { "Flag indicating whether to use the first text as a fallback if no suitable title is found. Defaults to false.", requiredMode = Schema.RequiredMode.NOT_REQUIRED, defaultValue = "false") - private boolean useFirstTextAsFallback; + private Boolean useFirstTextAsFallback; } diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/ExtractImageScansRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/ExtractImageScansRequest.java index 9fda7b6fa..6345d4489 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/ExtractImageScansRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/ExtractImageScansRequest.java @@ -12,36 +12,37 @@ import lombok.EqualsAndHashCode; public class ExtractImageScansRequest { @Schema( description = "The input file containing image scans", - requiredMode = Schema.RequiredMode.REQUIRED) + requiredMode = Schema.RequiredMode.REQUIRED, + format = "binary") private MultipartFile fileInput; @Schema( description = "The angle threshold for the image scan extraction", - defaultValue = "5", - example = "5") - private int angleThreshold = 5; + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "5") + private int angleThreshold; @Schema( description = "The tolerance for the image scan extraction", - defaultValue = "20", - example = "20") - private int tolerance = 20; + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "20") + private int tolerance; @Schema( description = "The minimum area for the image scan extraction", - defaultValue = "8000", - example = "8000") - private int minArea = 8000; + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "8000") + private int minArea; @Schema( description = "The minimum contour area for the image scan extraction", - defaultValue = "500", - example = "500") - private int minContourArea = 500; + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "500") + private int minContourArea; @Schema( description = "The border size for the image scan extraction", - defaultValue = "1", - example = "1") - private int borderSize = 1; + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "1") + private int borderSize; } diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/FlattenRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/FlattenRequest.java index 364d3129f..37be18444 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/FlattenRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/FlattenRequest.java @@ -13,6 +13,9 @@ public class FlattenRequest extends PDFFile { @Schema( description = - "True to flatten only the forms, false to flatten full PDF (Convert page to image)") + "True to flatten only the forms, false to flatten full PDF (Convert page to" + + " image)", + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "false") private Boolean flattenOnlyForms; } diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/MetadataRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/MetadataRequest.java index fb326e79e..0238e9607 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/MetadataRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/MetadataRequest.java @@ -13,38 +13,72 @@ import stirling.software.SPDF.model.api.PDFFile; @EqualsAndHashCode(callSuper = true) public class MetadataRequest extends PDFFile { - @Schema(description = "Delete all metadata if set to true") - private boolean deleteAll; + @Schema( + description = "Delete all metadata if set to true", + defaultValue = "false", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean deleteAll; - @Schema(description = "The author of the document") + @Schema( + description = "The author of the document", + defaultValue = "author", + requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String author; - @Schema(description = "The creation date of the document (format: yyyy/MM/dd HH:mm:ss)") + @Schema( + description = "The creation date of the document (format: yyyy/MM/dd HH:mm:ss)", + pattern = "yyyy/MM/dd HH:mm:ss", + defaultValue = "2023/10/01 12:00:00", + requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String creationDate; - @Schema(description = "The creator of the document") + @Schema( + description = "The creator of the document", + defaultValue = "creator", + requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String creator; - @Schema(description = "The keywords for the document") + @Schema( + description = "The keywords for the document", + defaultValue = "keywords", + requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String keywords; - @Schema(description = "The modification date of the document (format: yyyy/MM/dd HH:mm:ss)") + @Schema( + description = "The modification date of the document (format: yyyy/MM/dd HH:mm:ss)", + pattern = "yyyy/MM/dd HH:mm:ss", + defaultValue = "2023/10/01 12:00:00", + requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String modificationDate; - @Schema(description = "The producer of the document") + @Schema( + description = "The producer of the document", + defaultValue = "producer", + requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String producer; - @Schema(description = "The subject of the document") + @Schema( + description = "The subject of the document", + defaultValue = "subject", + requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String subject; - @Schema(description = "The title of the document") + @Schema( + description = "The title of the document", + defaultValue = "title", + requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String title; - @Schema(description = "The trapped status of the document") + @Schema( + description = "The trapped status of the document", + defaultValue = "False", + allowableValues = {"True", "False", "Unknown"}, + requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String trapped; @Schema( description = - "Map list of key and value of custom parameters. Note these must start with customKey and customValue if they are non-standard") + "Map list of key and value of custom parameters. Note these must start with" + + " customKey and customValue if they are non-standard") private Map allRequestParams; } diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/OptimizePdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/OptimizePdfRequest.java index 147d163e8..dc426e965 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/OptimizePdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/OptimizePdfRequest.java @@ -13,30 +13,36 @@ public class OptimizePdfRequest extends PDFFile { @Schema( description = - "The level of optimization to apply to the PDF file. Higher values indicate greater compression but may reduce quality.", + "The level of optimization to apply to the PDF file. Higher values indicate" + + " greater compression but may reduce quality.", + defaultValue = "5", + requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"1", "2", "3", "4", "5", "6", "7", "8", "9"}) private Integer optimizeLevel; - @Schema(description = "The expected output size, e.g. '100MB', '25KB', etc.") + @Schema( + description = "The expected output size, e.g. '100MB', '25KB', etc.", + defaultValue = "25KB", + requiredMode = Schema.RequiredMode.REQUIRED) private String expectedOutputSize; @Schema( description = "Whether to linearize the PDF for faster web viewing. Default is false.", + requiredMode = Schema.RequiredMode.REQUIRED, defaultValue = "false") private Boolean linearize = false; @Schema( description = - "Whether to normalize the PDF content for better compatibility. Default is false.", + "Whether to normalize the PDF content for better compatibility. Default is" + + " false.", + requiredMode = Schema.RequiredMode.REQUIRED, defaultValue = "false") private Boolean normalize = false; @Schema( description = "Whether to convert the PDF to grayscale. Default is false.", + requiredMode = Schema.RequiredMode.REQUIRED, defaultValue = "false") private Boolean grayscale = false; - - public Boolean getGrayscale() { - return grayscale; - } } diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/OverlayImageRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/OverlayImageRequest.java index 49a3185dc..65bf4ce90 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/OverlayImageRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/OverlayImageRequest.java @@ -13,21 +13,27 @@ import stirling.software.SPDF.model.api.PDFFile; @EqualsAndHashCode(callSuper = true) public class OverlayImageRequest extends PDFFile { - @Schema(description = "The image file to be overlaid onto the PDF.") + @Schema( + description = "The image file to be overlaid onto the PDF.", + requiredMode = Schema.RequiredMode.REQUIRED, + format = "binary") private MultipartFile imageFile; @Schema( description = "The x-coordinate at which to place the top-left corner of the image.", - example = "0") + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "0") private float x; @Schema( description = "The y-coordinate at which to place the top-left corner of the image.", - example = "0") + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "0") private float y; @Schema( description = "Whether to overlay the image onto every page of the PDF.", - example = "false") - private boolean everyPage; + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "false") + private Boolean everyPage; } diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/ProcessPdfWithOcrRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/ProcessPdfWithOcrRequest.java index 3415fbf90..7eb254b3f 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/ProcessPdfWithOcrRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/ProcessPdfWithOcrRequest.java @@ -13,16 +13,21 @@ import stirling.software.SPDF.model.api.PDFFile; @EqualsAndHashCode(callSuper = true) public class ProcessPdfWithOcrRequest extends PDFFile { - @Schema(description = "List of languages to use in OCR processing") + @Schema( + description = "List of languages to use in OCR processing, e.g., 'eng', 'deu'", + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "[\"eng\"]") private List languages; @Schema( description = "Specify the OCR type, e.g., 'skip-text', 'force-ocr', or 'Normal'", + requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"skip-text", "force-ocr", "Normal"}) private String ocrType; @Schema( description = "Specify the OCR render type, either 'hocr' or 'sandwich'", + requiredMode = Schema.RequiredMode.REQUIRED, allowableValues = {"hocr", "sandwich"}, defaultValue = "hocr") private String ocrRenderType = "hocr"; diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/RemoveBlankPagesRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/RemoveBlankPagesRequest.java index 85bf7d1e0..dd018dea3 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/RemoveBlankPagesRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/RemoveBlankPagesRequest.java @@ -13,13 +13,17 @@ public class RemoveBlankPagesRequest extends PDFFile { @Schema( description = "The threshold value to determine blank pages", - example = "10", + requiredMode = Schema.RequiredMode.REQUIRED, + minimum = "0", + maximum = "255", defaultValue = "10") - private int threshold = 10; + private int threshold; @Schema( description = "The percentage of white color on a page to consider it as blank", - example = "99.9", + requiredMode = Schema.RequiredMode.REQUIRED, + minimum = "0.1", + maximum = "100", defaultValue = "99.9") - private float whitePercent = 99.9f; + private float whitePercent; } diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/ReplaceAndInvertColorRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/ReplaceAndInvertColorRequest.java index 7c1a620d6..c6f948f7c 100644 --- a/src/main/java/stirling/software/SPDF/model/api/misc/ReplaceAndInvertColorRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/misc/ReplaceAndInvertColorRequest.java @@ -13,12 +13,16 @@ public class ReplaceAndInvertColorRequest extends PDFFile { @Schema( description = "Replace and Invert color options of a pdf.", + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "HIGH_CONTRAST_COLOR", allowableValues = {"HIGH_CONTRAST_COLOR", "CUSTOM_COLOR", "FULL_INVERSION"}) private ReplaceAndInvert replaceAndInvertOption; @Schema( description = "If HIGH_CONTRAST_COLOR option selected, then pick the default color option for text and background.", + requiredMode = Schema.RequiredMode.REQUIRED, + defaultValue = "WHITE_TEXT_ON_BLACK", allowableValues = { "WHITE_TEXT_ON_BLACK", "BLACK_TEXT_ON_WHITE", diff --git a/src/main/java/stirling/software/SPDF/model/api/security/AddPasswordRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/AddPasswordRequest.java index 982a31244..8dfa4e54f 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/AddPasswordRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/AddPasswordRequest.java @@ -13,45 +13,50 @@ public class AddPasswordRequest extends PDFFile { @Schema( description = - "The owner password to be added to the PDF file (Restricts what can be done with the document once it is opened)", - defaultValue = "") + "The owner password to be added to the PDF file (Restricts what can be done" + + " with the document once it is opened)", + format = "password") private String ownerPassword; @Schema( description = - "The password to be added to the PDF file (Restricts the opening of the document itself.)", - defaultValue = "") + "The password to be added to the PDF file (Restricts the opening of the" + + " document itself.)", + format = "password") private String password; @Schema( description = "The length of the encryption key", allowableValues = {"40", "128", "256"}, - defaultValue = "256") + defaultValue = "256", + requiredMode = Schema.RequiredMode.REQUIRED) private int keyLength = 256; - @Schema(description = "Whether document assembly is prevented", example = "false") - private boolean preventAssembly; + @Schema(description = "Whether document assembly is prevented", defaultValue = "false") + private Boolean preventAssembly; - @Schema(description = "Whether content extraction is prevented", example = "false") - private boolean preventExtractContent; + @Schema(description = "Whether content extraction is prevented", defaultValue = "false") + private Boolean preventExtractContent; @Schema( description = "Whether content extraction for accessibility is prevented", - example = "false") - private boolean preventExtractForAccessibility; + defaultValue = "false") + private Boolean preventExtractForAccessibility; - @Schema(description = "Whether form filling is prevented", example = "false") - private boolean preventFillInForm; + @Schema(description = "Whether form filling is prevented", defaultValue = "false") + private Boolean preventFillInForm; - @Schema(description = "Whether document modification is prevented", example = "false") - private boolean preventModify; + @Schema(description = "Whether document modification is prevented", defaultValue = "false") + private Boolean preventModify; - @Schema(description = "Whether modification of annotations is prevented", example = "false") - private boolean preventModifyAnnotations; + @Schema( + description = "Whether modification of annotations is prevented", + defaultValue = "false") + private Boolean preventModifyAnnotations; - @Schema(description = "Whether printing of the document is prevented", example = "false") - private boolean preventPrinting; + @Schema(description = "Whether printing of the document is prevented", defaultValue = "false") + private Boolean preventPrinting; - @Schema(description = "Whether faithful printing is prevented", example = "false") - private boolean preventPrintingFaithful; + @Schema(description = "Whether faithful printing is prevented", defaultValue = "false") + private Boolean preventPrintingFaithful; } diff --git a/src/main/java/stirling/software/SPDF/model/api/security/AddWatermarkRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/AddWatermarkRequest.java index f4ebada01..0a8a2559e 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/AddWatermarkRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/AddWatermarkRequest.java @@ -19,7 +19,7 @@ public class AddWatermarkRequest extends PDFFile { requiredMode = Schema.RequiredMode.REQUIRED) private String watermarkType; - @Schema(description = "The watermark text") + @Schema(description = "The watermark text", defaultValue = "Stirling Software") private String watermarkText; @Schema(description = "The watermark image") @@ -29,26 +29,29 @@ public class AddWatermarkRequest extends PDFFile { description = "The selected alphabet", allowableValues = {"roman", "arabic", "japanese", "korean", "chinese"}, defaultValue = "roman") - private String alphabet = "roman"; + private String alphabet; - @Schema(description = "The font size of the watermark text", example = "30") - private float fontSize = 30; + @Schema(description = "The font size of the watermark text", defaultValue = "30") + private float fontSize; - @Schema(description = "The rotation of the watermark in degrees", example = "0") - private float rotation = 0; + @Schema(description = "The rotation of the watermark in degrees", defaultValue = "0") + private float rotation; - @Schema(description = "The opacity of the watermark (0.0 - 1.0)", example = "0.5") + @Schema(description = "The opacity of the watermark (0.0 - 1.0)", defaultValue = "0.5") private float opacity; - @Schema(description = "The width spacer between watermark elements", example = "50") + @Schema(description = "The width spacer between watermark elements", defaultValue = "50") private int widthSpacer; - @Schema(description = "The height spacer between watermark elements", example = "50") + @Schema(description = "The height spacer between watermark elements", defaultValue = "50") private int heightSpacer; @Schema(description = "The color for watermark", defaultValue = "#d3d3d3") - private String customColor = "#d3d3d3"; + private String customColor; - @Schema(description = "Convert the redacted PDF to an image", defaultValue = "false") - private boolean convertPDFToImage; + @Schema( + description = "Convert the redacted PDF to an image", + defaultValue = "false", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean convertPDFToImage; } diff --git a/src/main/java/stirling/software/SPDF/model/api/security/ManualRedactPdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/ManualRedactPdfRequest.java index 2d431b7ef..bcc715d16 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/ManualRedactPdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/ManualRedactPdfRequest.java @@ -12,12 +12,20 @@ import stirling.software.SPDF.model.api.PDFWithPageNums; @Data @EqualsAndHashCode(callSuper = true) public class ManualRedactPdfRequest extends PDFWithPageNums { - @Schema(description = "A list of areas that should be redacted") + @Schema( + description = "A list of areas that should be redacted", + requiredMode = Schema.RequiredMode.REQUIRED) private List redactions; - @Schema(description = "Convert the redacted PDF to an image", defaultValue = "false") - private boolean convertPDFToImage; + @Schema( + description = "Convert the redacted PDF to an image", + defaultValue = "false", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean convertPDFToImage; - @Schema(description = "The color used to fully redact certain pages") + @Schema( + description = "The color used to fully redact certain pages", + defaultValue = "#000000", + requiredMode = Schema.RequiredMode.REQUIRED) private String pageRedactionColor; } diff --git a/src/main/java/stirling/software/SPDF/model/api/security/PDFPasswordRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/PDFPasswordRequest.java index 2ee29757a..0353fe3e7 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/PDFPasswordRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/PDFPasswordRequest.java @@ -13,6 +13,7 @@ public class PDFPasswordRequest extends PDFFile { @Schema( description = "The password of the PDF file", - requiredMode = Schema.RequiredMode.REQUIRED) + format = "password", + requiredMode = Schema.RequiredMode.NOT_REQUIRED) private String password; } diff --git a/src/main/java/stirling/software/SPDF/model/api/security/RedactPdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/RedactPdfRequest.java index e92ae7c5a..0ec6ca20a 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/RedactPdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/RedactPdfRequest.java @@ -13,22 +13,37 @@ public class RedactPdfRequest extends PDFFile { @Schema( description = "List of text to redact from the PDF", - type = "string", + defaultValue = "text,text2", requiredMode = Schema.RequiredMode.REQUIRED) private String listOfText; - @Schema(description = "Whether to use regex for the listOfText", defaultValue = "false") - private boolean useRegex; + @Schema( + description = "Whether to use regex for the listOfText", + defaultValue = "false", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean useRegex; - @Schema(description = "Whether to use whole word search", defaultValue = "false") - private boolean wholeWordSearch; + @Schema( + description = "Whether to use whole word search", + defaultValue = "false", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean wholeWordSearch; - @Schema(description = "Hexadecimal color code for redaction, e.g. #FF0000 or 000000", defaultValue = "#000000") - private String redactColor = "#000000"; + @Schema( + description = "The color for redaction", + defaultValue = "#000000", + requiredMode = Schema.RequiredMode.REQUIRED) + private String redactColor; - @Schema(description = "Custom padding for redaction", type = "number") + @Schema( + description = "Custom padding for redaction", + type = "number", + requiredMode = Schema.RequiredMode.REQUIRED) private float customPadding; - @Schema(description = "Convert the redacted PDF to an image", defaultValue = "false") - private boolean convertPDFToImage; + @Schema( + description = "Convert the redacted PDF to an image", + defaultValue = "false", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean convertPDFToImage; } diff --git a/src/main/java/stirling/software/SPDF/model/api/security/RedactionArea.java b/src/main/java/stirling/software/SPDF/model/api/security/RedactionArea.java index a8d2a61ad..9b44835f9 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/RedactionArea.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/RedactionArea.java @@ -3,8 +3,10 @@ package stirling.software.SPDF.model.api.security; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import lombok.EqualsAndHashCode; @Data +@EqualsAndHashCode public class RedactionArea { @Schema(description = "The left edge point of the area to be redacted.") private Double x; diff --git a/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java index 7be655f76..dc38b9fc8 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/SanitizePdfRequest.java @@ -11,21 +11,39 @@ import stirling.software.SPDF.model.api.PDFFile; @EqualsAndHashCode(callSuper = true) public class SanitizePdfRequest extends PDFFile { - @Schema(description = "Remove JavaScript actions from the PDF", defaultValue = "false") - private boolean removeJavaScript; + @Schema( + description = "Remove JavaScript actions from the PDF", + defaultValue = "true", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean removeJavaScript; - @Schema(description = "Remove embedded files from the PDF", defaultValue = "false") - private boolean removeEmbeddedFiles; + @Schema( + description = "Remove embedded files from the PDF", + defaultValue = "true", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean removeEmbeddedFiles; - @Schema(description = "Remove XMP metadata from the PDF", defaultValue = "false") - private boolean removeXMPMetadata; + @Schema( + description = "Remove XMP metadata from the PDF", + defaultValue = "false", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean removeXMPMetadata; - @Schema(description = "Remove document info metadata from the PDF", defaultValue = "false") - private boolean removeMetadata; + @Schema( + description = "Remove document info metadata from the PDF", + defaultValue = "false", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean removeMetadata; - @Schema(description = "Remove links from the PDF", defaultValue = "false") - private boolean removeLinks; + @Schema( + description = "Remove links from the PDF", + defaultValue = "false", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean removeLinks; - @Schema(description = "Remove fonts from the PDF", defaultValue = "false") - private boolean removeFonts; + @Schema( + description = "Remove fonts from the PDF", + defaultValue = "false", + requiredMode = Schema.RequiredMode.REQUIRED) + private Boolean removeFonts; } diff --git a/src/main/java/stirling/software/SPDF/model/api/security/SignPDFWithCertRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/SignPDFWithCertRequest.java index d9fe92def..20356af08 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/SignPDFWithCertRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/SignPDFWithCertRequest.java @@ -15,7 +15,8 @@ public class SignPDFWithCertRequest extends PDFFile { @Schema( description = "The type of the digital certificate", - allowableValues = {"PEM", "PKCS12", "JKS"}) + allowableValues = {"PEM", "PKCS12", "JKS"}, + requiredMode = Schema.RequiredMode.REQUIRED) private String certType; @Schema( @@ -36,24 +37,31 @@ public class SignPDFWithCertRequest extends PDFFile { @Schema(description = "The password for the keystore or the private key", format = "password") private String password; - @Schema(description = "Whether to visually show the signature in the PDF file") + @Schema( + description = "Whether to visually show the signature in the PDF file", + defaultValue = "false", + requiredMode = Schema.RequiredMode.REQUIRED) private Boolean showSignature; - @Schema(description = "The reason for signing the PDF") + @Schema(description = "The reason for signing the PDF", defaultValue = "Signed by SPDF") private String reason; - @Schema(description = "The location where the PDF is signed") + @Schema(description = "The location where the PDF is signed", defaultValue = "SPDF") private String location; - @Schema(description = "The name of the signer") + @Schema(description = "The name of the signer", defaultValue = "SPDF") private String name; @Schema( description = "The page number where the signature should be visible. This is required if" - + " showSignature is set to true") + + " showSignature is set to true", + defaultValue = "1") private Integer pageNumber; - @Schema(description = "Whether to visually show a signature logo along with the signature") + @Schema( + description = "Whether to visually show a signature logo along with the signature", + defaultValue = "true", + requiredMode = Schema.RequiredMode.REQUIRED) private Boolean showLogo; } diff --git a/src/main/java/stirling/software/SPDF/model/api/security/SignatureValidationRequest.java b/src/main/java/stirling/software/SPDF/model/api/security/SignatureValidationRequest.java index 7bb9324fe..39e96b955 100644 --- a/src/main/java/stirling/software/SPDF/model/api/security/SignatureValidationRequest.java +++ b/src/main/java/stirling/software/SPDF/model/api/security/SignatureValidationRequest.java @@ -13,6 +13,8 @@ import stirling.software.SPDF.model.api.PDFFile; @EqualsAndHashCode(callSuper = true) public class SignatureValidationRequest extends PDFFile { - @Schema(description = "(Optional) file to compare PDF cert signatures against x.509 format") + @Schema( + description = "(Optional) file to compare PDF cert signatures against x.509 format", + requiredMode = Schema.RequiredMode.NOT_REQUIRED) private MultipartFile certFile; } diff --git a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserDetails.java b/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserDetails.java index 80dd2d14e..f69e4c658 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserDetails.java +++ b/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserDetails.java @@ -9,6 +9,9 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) public class UpdateUserDetails extends UpdateUserUsername { - @Schema(description = "new password for user") + @Schema( + description = "new password for user", + format = "password", + requiredMode = Schema.RequiredMode.REQUIRED) private String newPassword; } diff --git a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserUsername.java b/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserUsername.java index c0c14fc08..b4b0105f3 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserUsername.java +++ b/src/main/java/stirling/software/SPDF/model/api/user/UpdateUserUsername.java @@ -9,6 +9,6 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) public class UpdateUserUsername extends UsernameAndPass { - @Schema(description = "new password for user") + @Schema(description = "new username for user") private String newUsername; } diff --git a/src/main/java/stirling/software/SPDF/model/api/user/Username.java b/src/main/java/stirling/software/SPDF/model/api/user/Username.java index d29a544b7..5c8d8a482 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/Username.java +++ b/src/main/java/stirling/software/SPDF/model/api/user/Username.java @@ -9,6 +9,6 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode public class Username { - @Schema(description = "username of user") + @Schema(description = "username of user", requiredMode = Schema.RequiredMode.REQUIRED) private String username; } diff --git a/src/main/java/stirling/software/SPDF/model/api/user/UsernameAndPass.java b/src/main/java/stirling/software/SPDF/model/api/user/UsernameAndPass.java index ec8f5c08a..e9a205c0d 100644 --- a/src/main/java/stirling/software/SPDF/model/api/user/UsernameAndPass.java +++ b/src/main/java/stirling/software/SPDF/model/api/user/UsernameAndPass.java @@ -9,6 +9,6 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) public class UsernameAndPass extends Username { - @Schema(description = "password of user") + @Schema(description = "password of user", format = "password") private String password; } diff --git a/src/main/java/stirling/software/SPDF/utils/PDFToFile.java b/src/main/java/stirling/software/SPDF/utils/PDFToFile.java index ef2c5b9cf..268a92172 100644 --- a/src/main/java/stirling/software/SPDF/utils/PDFToFile.java +++ b/src/main/java/stirling/software/SPDF/utils/PDFToFile.java @@ -25,11 +25,13 @@ import com.vladsch.flexmark.util.data.MutableDataSet; import io.github.pixee.security.Filenames; +import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; @Slf4j +@NoArgsConstructor public class PDFToFile { public ResponseEntity processPdfToMarkdown(MultipartFile inputFile) diff --git a/src/main/resources/templates/misc/remove-blanks.html b/src/main/resources/templates/misc/remove-blanks.html index cf483e22b..433a6ebd3 100644 --- a/src/main/resources/templates/misc/remove-blanks.html +++ b/src/main/resources/templates/misc/remove-blanks.html @@ -21,12 +21,12 @@
- +
- +
diff --git a/testing/cucumber/features/examples.feature b/testing/cucumber/features/examples.feature index 6252b76a6..3594861d2 100644 --- a/testing/cucumber/features/examples.feature +++ b/testing/cucumber/features/examples.feature @@ -2,7 +2,7 @@ Feature: API Validation @positive @password - Scenario: Remove password + Scenario: Remove password Given I generate a PDF file as "fileInput" And the pdf contains 3 pages And the pdf is encrypted with password "password123" @@ -47,9 +47,9 @@ Feature: API Validation And the response file should have size greater than 100 And the response PDF is passworded And the response status code should be 200 - + @positive @password - Scenario: Add password with other params + Scenario: Add password with other params Given I generate a PDF file as "fileInput" And the pdf contains 3 pages And the request data includes @@ -64,7 +64,7 @@ Feature: API Validation And the response file should have size greater than 100 And the response PDF is passworded And the response status code should be 200 - + @positive @watermark Scenario: Add watermark Given I generate a PDF file as "fileInput" @@ -78,6 +78,8 @@ Feature: API Validation | opacity | 0.5 | | widthSpacer | 50 | | heightSpacer | 50 | + | alphabet | roman | + | customColor | #d3d3d3 | When I send the API request to the endpoint "/api/v1/security/add-watermark" Then the response content type should be "application/pdf" And the response file should have size greater than 100 @@ -107,7 +109,7 @@ Feature: API Validation Then the response content type should be "application/pdf" And the response file should have size greater than 0 And the response status code should be 200 - + @positive @metadata Scenario: Update metadata Given I generate a PDF file as "fileInput" @@ -127,4 +129,4 @@ Feature: API Validation And the response PDF metadata should include "Title" as "Sample Title" And the response status code should be 200 - +