From b5bdf5b1c2bfddc74afd34752a4df894fdb82b14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Antunes=20Santos?= Date: Thu, 15 May 2025 23:16:28 +0100 Subject: [PATCH] feat(#3453): Add initial structure for Remove Header/Footer feature MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add backend API controller with dummy request model - Register endpoint in appropriate backend groups - Add test .txt file support for endpoint testing - Create homepage/navbar card for the feature - Implement frontend page structure for the feature - Set up dummy API to test backend–frontend integration --- .../SPDF/config/EndpointConfiguration.java | 2 + .../api/RemoveHeaderFooterController.java | 34 +++++++++ .../controller/web/GeneralWebController.java | 7 ++ .../api/general/RemoveHeaderFooterForm.java | 13 ++++ .../main/resources/messages_en_GB.properties | 8 +++ .../templates/fragments/navElements.html | 5 ++ .../main/resources/templates/home-legacy.html | 3 + .../templates/remove-header-footer.html | 70 +++++++++++++++++++ testing/allEndpointsRemovedSettings.yml | 2 +- testing/endpoints.txt | 1 + testing/webpage_urls.txt | 1 + testing/webpage_urls_full.txt | 3 +- 12 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 stirling-pdf/src/main/java/stirling/software/SPDF/controller/api/RemoveHeaderFooterController.java create mode 100644 stirling-pdf/src/main/java/stirling/software/SPDF/model/api/general/RemoveHeaderFooterForm.java create mode 100644 stirling-pdf/src/main/resources/templates/remove-header-footer.html diff --git a/stirling-pdf/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java b/stirling-pdf/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java index c9872992a..631845318 100644 --- a/stirling-pdf/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java +++ b/stirling-pdf/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java @@ -120,6 +120,7 @@ public class EndpointConfiguration { addEndpointToGroup("PageOps", "scale-pages"); addEndpointToGroup("PageOps", "adjust-contrast"); addEndpointToGroup("PageOps", "crop"); + addEndpointToGroup("PageOps", "removeHeaderFooter"); addEndpointToGroup("PageOps", "auto-split-pdf"); addEndpointToGroup("PageOps", "extract-page"); addEndpointToGroup("PageOps", "pdf-to-single-page"); @@ -236,6 +237,7 @@ public class EndpointConfiguration { addEndpointToGroup("Java", "auto-split-pdf"); addEndpointToGroup("Java", "sanitize-pdf"); addEndpointToGroup("Java", "crop"); + addEndpointToGroup("Java", "removeHeaderFooter"); addEndpointToGroup("Java", "get-info-on-pdf"); addEndpointToGroup("Java", "extract-page"); addEndpointToGroup("Java", "pdf-to-single-page"); diff --git a/stirling-pdf/src/main/java/stirling/software/SPDF/controller/api/RemoveHeaderFooterController.java b/stirling-pdf/src/main/java/stirling/software/SPDF/controller/api/RemoveHeaderFooterController.java new file mode 100644 index 000000000..3b36e4feb --- /dev/null +++ b/stirling-pdf/src/main/java/stirling/software/SPDF/controller/api/RemoveHeaderFooterController.java @@ -0,0 +1,34 @@ +package stirling.software.SPDF.controller.api; + +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 io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + +import lombok.RequiredArgsConstructor; + +import stirling.software.SPDF.model.api.general.RemoveHeaderFooterForm; + +@RestController +@RequestMapping("/api/v1/general") +@Tag(name = "General", description = "General APIs") +@RequiredArgsConstructor +public class RemoveHeaderFooterController { + + // private final CustomPDFDocumentFactory pdfDocumentFactory; + + @PostMapping(value = "/remove-header-footer", consumes = "multipart/form-data") + @Operation( + summary = "Removes headers and/or footers from a PDF document", + description = "Remove header and/or footer") + public String removeHeaderFooter(@ModelAttribute RemoveHeaderFooterForm form) { + // Print the received message + System.out.println("Received message: " + form.getMessage()); + + // Respond with a message + return "footer Removed"; + } +} diff --git a/stirling-pdf/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java b/stirling-pdf/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java index 72486a28f..d07daed0d 100644 --- a/stirling-pdf/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java +++ b/stirling-pdf/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java @@ -298,6 +298,13 @@ public class GeneralWebController { return "crop"; } + @GetMapping("/remove-header-footer") + @Hidden + public String removeHeaderFooterForm(Model model) { + model.addAttribute("currentPage", "remove-header-footer"); + return "remove-header-footer"; + } + @GetMapping("/auto-split-pdf") @Hidden public String autoSPlitPDFForm(Model model) { diff --git a/stirling-pdf/src/main/java/stirling/software/SPDF/model/api/general/RemoveHeaderFooterForm.java b/stirling-pdf/src/main/java/stirling/software/SPDF/model/api/general/RemoveHeaderFooterForm.java new file mode 100644 index 000000000..9c948bf66 --- /dev/null +++ b/stirling-pdf/src/main/java/stirling/software/SPDF/model/api/general/RemoveHeaderFooterForm.java @@ -0,0 +1,13 @@ +package stirling.software.SPDF.model.api.general; + +import io.swagger.v3.oas.annotations.media.Schema; + +import lombok.Data; + +@Data +// @EqualsAndHashCode(callSuper = true) +public class RemoveHeaderFooterForm { + + @Schema(description = "Test Message", type = "string") + private String message; +} diff --git a/stirling-pdf/src/main/resources/messages_en_GB.properties b/stirling-pdf/src/main/resources/messages_en_GB.properties index 7dc6cb571..20d45916c 100644 --- a/stirling-pdf/src/main/resources/messages_en_GB.properties +++ b/stirling-pdf/src/main/resources/messages_en_GB.properties @@ -751,6 +751,10 @@ home.validateSignature.title=Validate PDF Signature home.validateSignature.desc=Verify digital signatures and certificates in PDF documents validateSignature.tags=signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate +home.remove-header-footer.title=Remove PDF Headers and Footers +home.remove-header-footer.desc=Remove the headers and/or footers from a PDF document +remove-header-footer.tags=remove headers, remove footers, remove, header, footer + #replace-invert-color replace-color.title=Advanced Colour options replace-color.header=Replace-Invert Colour PDF @@ -996,6 +1000,10 @@ crop.title=Crop crop.header=Crop PDF crop.submit=Submit +#remove-header-footer +remove-header-footer.title=Remove Header/Footer +remove-header-footer.header=Remove Header/Footer +remove-header-footer.submit=Remove #autoSplitPDF autoSplitPDF.title=Auto Split PDF diff --git a/stirling-pdf/src/main/resources/templates/fragments/navElements.html b/stirling-pdf/src/main/resources/templates/fragments/navElements.html index cd7fae74b..702bcab1b 100644 --- a/stirling-pdf/src/main/resources/templates/fragments/navElements.html +++ b/stirling-pdf/src/main/resources/templates/fragments/navElements.html @@ -19,6 +19,11 @@
+ +
+
+
diff --git a/stirling-pdf/src/main/resources/templates/home-legacy.html b/stirling-pdf/src/main/resources/templates/home-legacy.html index d60ac220e..4a4579a75 100644 --- a/stirling-pdf/src/main/resources/templates/home-legacy.html +++ b/stirling-pdf/src/main/resources/templates/home-legacy.html @@ -122,6 +122,9 @@
+
+
diff --git a/stirling-pdf/src/main/resources/templates/remove-header-footer.html b/stirling-pdf/src/main/resources/templates/remove-header-footer.html new file mode 100644 index 000000000..402a12a8d --- /dev/null +++ b/stirling-pdf/src/main/resources/templates/remove-header-footer.html @@ -0,0 +1,70 @@ + + + + + + + +
+
+ +

+
+
+
+
+ toolbar + +
+

+ remove_header_footer test +
+
+ + +
+ +
+
+
+
+ + + + + +
+
+ +
+ + diff --git a/testing/allEndpointsRemovedSettings.yml b/testing/allEndpointsRemovedSettings.yml index 3290d6fef..a7141b29a 100644 --- a/testing/allEndpointsRemovedSettings.yml +++ b/testing/allEndpointsRemovedSettings.yml @@ -128,7 +128,7 @@ ui: languages: [] # If empty, all languages are enabled. To display only German and Polish ["de_DE", "pl_PL"]. British English is always enabled. endpoints: # All the possible endpoints are disabled - toRemove: [crop, merge-pdfs, multi-page-layout, overlay-pdfs, pdf-to-single-page, rearrange-pages, remove-image-pdf, remove-pages, rotate-pdf, scale-pages, split-by-size-or-count, split-pages, split-pdf-by-chapters, split-pdf-by-sections, add-password, add-watermark, auto-redact, cert-sign, get-info-on-pdf, redact, remove-cert-sign, remove-password, sanitize-pdf, validate-signature, file-to-pdf, html-to-pdf, img-to-pdf, markdown-to-pdf, pdf-to-csv, pdf-to-html, pdf-to-img, pdf-to-markdown, pdf-to-pdfa, pdf-to-presentation, pdf-to-text, pdf-to-word, pdf-to-xml, url-to-pdf, add-image, add-page-numbers, add-stamp, auto-rename, auto-split-pdf, compress-pdf, decompress-pdf, extract-image-scans, extract-images, flatten, ocr-pdf, remove-blanks, repair, replace-invert-pdf, show-javascript, update-metadata, filter-contains-image, filter-contains-text, filter-file-size, filter-page-count, filter-page-rotation, filter-page-size] # list endpoints to disable (e.g. ['img-to-pdf', 'remove-pages']) + toRemove: [crop, merge-pdfs, multi-page-layout, overlay-pdfs, pdf-to-single-page, rearrange-pages, remove-image-pdf, remove-pages, rotate-pdf, scale-pages, split-by-size-or-count, split-pages, split-pdf-by-chapters, split-pdf-by-sections, add-password, add-watermark, auto-redact, cert-sign, get-info-on-pdf, redact, remove-cert-sign, remove-password, sanitize-pdf, validate-signature, file-to-pdf, html-to-pdf, img-to-pdf, markdown-to-pdf, pdf-to-csv, pdf-to-html, pdf-to-img, pdf-to-markdown, pdf-to-pdfa, pdf-to-presentation, pdf-to-text, pdf-to-word, pdf-to-xml, url-to-pdf, add-image, add-page-numbers, add-stamp, auto-rename, auto-split-pdf, compress-pdf, decompress-pdf, extract-image-scans, extract-images, flatten, ocr-pdf, remove-blanks, repair, replace-invert-pdf, show-javascript, update-metadata, filter-contains-image, filter-contains-text, filter-file-size, filter-page-count, filter-page-rotation, filter-page-size, remove-header-footer] # list endpoints to disable (e.g. ['img-to-pdf', 'remove-pages']) groupsToRemove: [] # list groups to disable (e.g. ['LibreOffice']) metrics: diff --git a/testing/endpoints.txt b/testing/endpoints.txt index 5468ad6c1..5e0eb5146 100644 --- a/testing/endpoints.txt +++ b/testing/endpoints.txt @@ -58,3 +58,4 @@ /api/v1/general/multi-page-layout /api/v1/general/merge-pdfs /api/v1/general/crop +/api/v1/general/remove-header-footer diff --git a/testing/webpage_urls.txt b/testing/webpage_urls.txt index 8ccaaf0b1..9d25ffa76 100644 --- a/testing/webpage_urls.txt +++ b/testing/webpage_urls.txt @@ -51,3 +51,4 @@ /swagger-ui/index.html /licenses /releases +/remove-header-footer diff --git a/testing/webpage_urls_full.txt b/testing/webpage_urls_full.txt index 86b908720..ffc821234 100644 --- a/testing/webpage_urls_full.txt +++ b/testing/webpage_urls_full.txt @@ -62,4 +62,5 @@ /stamp /validate-signature /view-pdf -/swagger-ui/index.html \ No newline at end of file +/swagger-ui/index.html +/remove-header-footer