mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-06-11 10:05:02 +00:00
7 Commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
![]() |
c7d6a063d7
|
Multi module refactor (#3640)
# Description of Changes Migrated Stirling PDF to a multi-module structure: * Introduced new `:stirling-pdf` module * Moved all the core logic and features of Stirling PDF into `:stirling-pdf` * Updated paths of jobs and scripts --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing) for more details. |
||
![]() |
9fbb0325b5
|
Add EML to PDF conversion functionality (#3650)
This pull request introduces a new feature for converting EML (email) files to PDF format, along with various customization options. It includes backend support for the conversion process, frontend integration for user interaction, and updates to localization and navigation. ### Backend Changes: * **Added EML to PDF Conversion Logic**: Implemented a new controller `ConvertEmlToPDF` with an endpoint `/api/v1/convert/eml/pdf` to handle EML-to-PDF conversion requests. This includes validation, support for HTML intermediate files, and enhanced options such as attachment handling and size limits. (`src/main/java/stirling/software/SPDF/controller/api/converters/ConvertEmlToPDF.java`) * **New Model for Conversion Requests**: Introduced `EmlToPdfRequest` class to encapsulate request parameters like attachment inclusion, maximum attachment size, and HTML download options. (`common/src/main/java/stirling/software/common/model/api/converters/EmlToPdfRequest.java`) * **Dependency Update**: Added `jakarta.mail:jakarta.mail-api:2.1.3` to the project dependencies for handling EML files. (`common/build.gradle`)  ### Frontend Changes: * **New Web Form**: Created a new HTML page `eml-to-pdf.html` for the EML-to-PDF conversion tool, allowing users to upload EML files and configure options. (`src/main/resources/templates/convert/eml-to-pdf.html`) * **Navigation Update**: Added a navigation entry for the EML-to-PDF tool in the sidebar. (`src/main/resources/templates/fragments/navElements.html`)  ### Localization and UI Enhancements: * **Localization Strings**: Added support for the EML-to-PDF tool in the `messages_en_GB.properties` file, including titles, descriptions, and help texts. (`src/main/resources/messages_en_GB.properties`) * **Web Controller Update**: Added a new route `/eml-to-pdf` in `ConverterWebController` to serve the EML-to-PDF form. (`src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java`) ### Highlights: * Attachment support: and Attachment section is created with fully working PDFAnnotations, which enable users to click paperclip and redirects to the attachment. (Requires PDF.js) * If attachments are present creates a catalog of attachments * Encoding support inside the body and header for local charachters e.g: ö,ő,ü etc.. * Optional: Users can download HTMLs, aswell as PDFs * Advanced features for conversion that: keep links, keep as much formatting as possible, keep images incl relative sizes, popular fonts and many more. ### Known limitations * Generally EML-to-HTML is very reliable however emails with complicated layout cause problem for Weasyprint, so not all emails can reliably converted to PDF. * Users need PDF.js and PDFCatalog support for best attachment/embedding support (but is not strict requirement) ### Challanges * Embedding was a large headache, not the Embedding itself per se more so the additional niceties such as: links, the catalog, consistent symbols (replaced the paperclip that is generated by pdf viewer with emoji paperclip that is consistent for everybody) and it was generally prone all sorts of hard to diagnose issues. * Encoding issues * Formatting issues However I think addressed these so shouldn't cause any additional headache. :) ### Examples:     Closes #503 --- ## Checklist ### General - [x] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [x] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [x] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md) (if applicable) - [x] I have performed a self-review of my own code - [x] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [x] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [x] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing) for more details. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> |
||
![]() |
2b9a3924d3 |
added proprietary module to base packages for scanning
clean up |
||
![]() |
70a9b5f009
|
Bump jakarta.servlet:jakarta.servlet-api from 6.0.0 to 6.1.0 (#3631)
[//]: # (dependabot-start) ⚠️ **Dependabot is rebasing this PR** ⚠️ Rebasing might not happen immediately, so don't worry if this takes some time. Note: if you make any changes to this PR yourself, they will take precedence over the rebase. --- [//]: # (dependabot-end) Bumps [jakarta.servlet:jakarta.servlet-api](https://github.com/eclipse-ee4j/servlet-api) from 6.0.0 to 6.1.0. <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/eclipse-ee4j/servlet-api/commits">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
![]() |
b08bc191fc
|
Bump org.springdoc:springdoc-openapi-starter-webmvc-ui from 2.8.6 to 2.8.8 (#3628)
[//]: # (dependabot-start) ⚠️ **Dependabot is rebasing this PR** ⚠️ Rebasing might not happen immediately, so don't worry if this takes some time. Note: if you make any changes to this PR yourself, they will take precedence over the rebase. --- [//]: # (dependabot-end) Bumps [org.springdoc:springdoc-openapi-starter-webmvc-ui](https://github.com/springdoc/springdoc-openapi) from 2.8.6 to 2.8.8. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/springdoc/springdoc-openapi/releases">org.springdoc:springdoc-openapi-starter-webmvc-ui's releases</a>.</em></p> <blockquote> <h2>v2.8.8</h2> <p><strong>Full Changelog</strong>: <a href="https://github.com/springdoc/springdoc-openapi/compare/v2.8.7...v2.8.8">https://github.com/springdoc/springdoc-openapi/compare/v2.8.7...v2.8.8</a></p> <h3>Fixed</h3> <ul> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2977">#2977</a> - Handle projects not using kotlin-reflect <a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2977">#2977</a></li> </ul> <h2>springdoc-openapi v2.8.7 released!</h2> <h2>What's Changed</h2> <h3>Added</h3> <ul> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2944">#2944</a> - Introducing springdoc-openapi-bom project</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2948">#2948</a> - Customize Servers via application.yml</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2963">#2963</a> - Set default content type for problem details object to application/problem+jso</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2971">#2971</a> - List of value classes in Kotlin</li> </ul> <h3>Changed</h3> <ul> <li>Upgrade swagger-ui to v5.21.0</li> <li>Upgrade swagger-core to 2.2.30</li> <li>Upgrade spring-boot to version 3.4.5</li> <li>Upgrade spring-security-oauth2-authorization-server to version 1.4.3</li> </ul> <h3>Fixed</h3> <ul> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2947">#2947</a> - Unexpected warning "Appended trailing slash to static resource location"</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2960">#2960</a> - NPE when customizing group's open-api without specifying any schema</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2969">#2969</a> - fix path to register resource handler to work SwaggerIndexPageTransformer considering /webjar path prefix</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2964">#2964</a> - Cannot add custom description and example for java.time.Duration since v2.8.6</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2972">#2972</a> - <a href="https://github.com/Header"><code>@Header</code></a>(schema = <a href="https://github.com/Schema"><code>@Schema</code></a>(type = "string")) generates empty or broken schema in OpenAPI output since 2.8.0</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2976">#2976</a>, <a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2967">#2967</a> - Build Failure due to Private Inner Class.</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2556">#2556</a> - Unable to determine if it is a Kotlin type</li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/lagoshny"><code>@lagoshny</code></a> made their first contribution in <a href="https://redirect.github.com/springdoc/springdoc-openapi/pull/2970">springdoc/springdoc-openapi#2970</a></li> <li><a href="https://github.com/mymx2"><code>@mymx2</code></a> made their first contribution in <a href="https://redirect.github.com/springdoc/springdoc-openapi/pull/2950">springdoc/springdoc-openapi#2950</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/springdoc/springdoc-openapi/compare/v2.8.6...v2.8.7">https://github.com/springdoc/springdoc-openapi/compare/v2.8.6...v2.8.7</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/springdoc/springdoc-openapi/blob/main/CHANGELOG.md">org.springdoc:springdoc-openapi-starter-webmvc-ui's changelog</a>.</em></p> <blockquote> <h2>[2.8.8] - 2025-05-04</h2> <h3>Fixed</h3> <ul> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2977">#2977</a> - Handle projects not using kotlin-reflect <a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2977">#2977</a></li> </ul> <h2>[2.8.7] - 2025-05-04</h2> <h3>Added</h3> <ul> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2944">#2944</a> - Introducing springdoc-openapi-bom project</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2948">#2948</a> - Customize Servers via application.yml</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2963">#2963</a> - Set default content type for problem details object to application/problem+jso</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2971">#2971</a> - List of value classes in Kotlin</li> </ul> <h3>Changed</h3> <ul> <li>Upgrade swagger-ui to v5.21.0</li> <li>Upgrade swagger-core to 2.2.30</li> <li>Upgrade spring-boot to version 3.4.5</li> <li>Upgrade spring-security-oauth2-authorization-server to version 1.4.3</li> </ul> <h3>Fixed</h3> <ul> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2947">#2947</a> - Unexpected warning "Appended trailing slash to static resource location"</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2960">#2960</a> - NPE when customizing group's open-api without specifying any schema</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2969">#2969</a> - fix path to register resource handler to work SwaggerIndexPageTransformer considering /webjar path prefix</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2964">#2964</a> - Cannot add custom description and example for java.time.Duration since v2.8.6</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2972">#2972</a> - <a href="https://github.com/Header"><code>@Header</code></a>(schema = <a href="https://github.com/Schema"><code>@Schema</code></a>(type = "string")) generates empty or broken schema in OpenAPI output since 2.8.0</li> <li><a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2976">#2976</a>, <a href="https://redirect.github.com/springdoc/springdoc-openapi/issues/2967">#2967</a> - Build Failure due to Private Inner Class.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
![]() |
5ec78b5425
|
Bump org.springframework.boot:spring-boot-dependencies from 3.4.5 to 3.5.0 (#3627)
Bumps [org.springframework.boot:spring-boot-dependencies](https://github.com/spring-projects/spring-boot) from 3.4.5 to 3.5.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/spring-projects/spring-boot/releases">org.springframework.boot:spring-boot-dependencies's releases</a>.</em></p> <blockquote> <h2>v3.5.0</h2> <p>Full <a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.5-Release-Notes">release notes for Spring Boot 3.5</a> are available on the wiki.</p> <h2>⭐ New Features</h2> <ul> <li>Make heapdump endpoint restricted by default <a href="https://redirect.github.com/spring-projects/spring-boot/pull/45624">#45624</a></li> <li>Remove SSL status tag from metrics <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45602">#45602</a></li> <li>Remove 'spring.http.client' deprecation and change 'spring.http.reactiveclient.settings' to 'spring.http.reactiveclient' <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45507">#45507</a></li> </ul> <h2>🐞 Bug Fixes</h2> <ul> <li>Unable to override/set nested ConfigurationProperties by passing as a system property <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45639">#45639</a></li> <li>ValidationAutoConfiguration triggers early initialization of properties binding <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45618">#45618</a></li> <li>Micrometer "enable" annotations property does not cover observed aspect <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45617">#45617</a></li> <li>spring.graphql.sse.timeout is no longer exposed <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45613">#45613</a></li> <li>SpringApplication.setEnvironmentPrefix is ignored when reading SPRING_PROFILES_ACTIVE <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45549">#45549</a></li> <li>IllegalStateException when extracting using layers a module with no code of its own <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45449">#45449</a></li> <li>Removed spring.batch.initialize-schema property is still considered <a href="https://redirect.github.com/spring-projects/spring-boot/pull/45380">#45380</a></li> <li>ReactorHttpClientBuilder does not offer a factory method to create the HttpClient <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45378">#45378</a></li> <li>Suggested values for spring.jpa.hibernate.ddl-auto are not aligned with Hibernate <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45351">#45351</a></li> <li>Custom default units declared on a field are ignored when binding properties in a native image <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45347">#45347</a></li> <li>DockerRegistryConfigAuthentication uses the wrong serverUrl as a fallback for the Credentials helper <a href="https://redirect.github.com/spring-projects/spring-boot/pull/45345">#45345</a></li> <li>Various spring.datasource properties are mistakenly marked as ignored <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45342">#45342</a></li> <li>JerseyWebApplicationInitializer always gets loaded, setting a ServletContext initParameter <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45297">#45297</a></li> <li>DockerRegistryConfigAuthentication does not align with Docker CLI <a href="https://redirect.github.com/spring-projects/spring-boot/pull/45292">#45292</a></li> <li>Unlike the Docker CLI, "\x00" characters are not trimmed from a decoded Docker Registry password <a href="https://redirect.github.com/spring-projects/spring-boot/pull/45290">#45290</a></li> <li>CloudFoundry security matcher logs a warning due to use of the 'ignoring()' method <a href="https://redirect.github.com/spring-projects/spring-boot/issues/32622">#32622</a></li> </ul> <h2>📔 Documentation</h2> <ul> <li>Document the java info contribution <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45634">#45634</a></li> <li>Document the process info contribution <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45632">#45632</a></li> <li>Document the os info contribution <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45630">#45630</a></li> <li>Document typical spring.application.group and name use <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45628">#45628</a></li> <li>Document that bean methods should be static when annotated with <code>@ConfigurationPropertiesBinding</code> <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45626">#45626</a></li> <li>Document the way that primary Kotlin constructors are used when binding <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45553">#45553</a></li> <li>Improve "profile" reference documentation with additional admonitions <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45551">#45551</a></li> <li>Improve setEnvironmentPrefix(...) reference documentation <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45376">#45376</a></li> <li>Document all the available Testcontainers integrations <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45367">#45367</a></li> <li>Document when a spring.config.import value is relative and when it is fixed <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45363">#45363</a></li> <li>Update org.cyclonedx.bom version in docs to 2.3.0 <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45320">#45320</a></li> <li>Update link to "Parameter Name Retention" section of Spring Framework's release notes <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45299">#45299</a></li> </ul> <h2>🔨 Dependency Upgrades</h2> <ul> <li>Prevent upgrade to Prometheus Client 1.3.7 <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45541">#45541</a></li> <li>Upgrade to Couchbase Client 3.8.1 <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45539">#45539</a></li> <li>Upgrade to Elasticsearch 8.18.1 <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45447">#45447</a></li> <li>Upgrade to GraphQL Java 24.0 <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45588">#45588</a></li> <li>Upgrade to Hibernate 6.6.15.Final <a href="https://redirect.github.com/spring-projects/spring-boot/issues/45540">#45540</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
![]() |
bedc3d02d7
|
New common module (#3573)
# Description of Changes Introduced a new `common` module for shared libs and commonly used classes. See the screenshot below for the file structure and classes that have been moved. --- <img width="452" alt="Screenshot 2025-05-22 at 11 46 56" src="https://github.com/user-attachments/assets/c9badabc-48f9-4079-b83e-7cfde0fb840f" /> <img width="470" alt="Screenshot 2025-05-22 at 11 47 30" src="https://github.com/user-attachments/assets/e8315b09-2e78-4c50-b9de-4dd9b9b0ecb1" /> ## Checklist ### General - [x] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [x] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md) (if applicable) - [x] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md) (if applicable) - [x] I have performed a self-review of my own code - [x] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [x] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [x] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/DeveloperGuide.md#6-testing) for more details. |