Stirling-PDF/frontend/src/core/utils
Balázs Szücs 182eb504de
[V2] feat(convert): add support for CBR to PDF and PDF to CBR conversions (#4833)
# Description of Changes
TLDR:
- Introduced `ConvertFromCbrSettings` and `ConvertToCbrSettings`
components for handling conversion-specific settings.
- Updated `ConvertSettings` to include CBR-related configurations.
- Updated `useConvertParameters` with new parameters: `cbrOptions` and
`pdfToCbrOptions`.
- Updated locales with CBR-related translations.
- Added endpoints and updated conversion matrix for CBR formats in
`convertConstants`.
- Modified `useConvertOperation` to handle CBR-specific parameters
during form data preparation.


For backend see this PR: #4581

This pull request adds support for converting between CBR (Comic Book
Archive) and PDF formats in the frontend. It introduces new UI
components for configuring conversion options, updates the conversion
constants and logic, and ensures parameters for these conversions are
handled correctly throughout the app.

**CBR/PDF Conversion Features:**

* Added new UI components: `ConvertFromCbrSettings` for CBR to PDF
conversions (option to optimize for ebook readers), and
`ConvertToCbrSettings` for PDF to CBR conversions (DPI selection for
image rendering). These are conditionally rendered in
`ConvertSettings.tsx` based on selected formats.

**Conversion Logic and Constants:**

* Extended conversion endpoints, format options, conversion matrix, and
endpoint mappings to support CBR to PDF and PDF to CBR conversions.
* Updated `shouldProcessFilesSeparately` logic to handle PDF to CBR
conversions, ensuring each PDF generates its own archive.

**Parameter Handling:**

* Added new parameters (`cbrOptions` and `pdfToCbrOptions`) to the
conversion parameter interface and default values, ensuring they are
set/reset appropriately during format changes
* Modified form data construction to include new options for CBR/PDF
conversions (optimize for ebook, DPI).

### Frontend
<img width="1291" height="861" alt="image"
src="https://github.com/user-attachments/assets/fb63be66-6f40-4dde-8235-86c9ddfa1f7c"
/>


<img width="1411" height="1000" alt="image"
src="https://github.com/user-attachments/assets/529593c4-6f32-4b11-9754-7f334f40d32e"
/>


Note on RAR5. You can go back-and-forth with this converter due to the
fact on default pdf to cbr makes RAR5 meanwhile, cbr to pdf can only
RAR4 and below. This is unfortunate limitation of JunRAR library. In the
real world, generally RAR5s are not that common, and they mostly
unsupported by open-source software.

<!--
Please provide a summary of the changes, including:

- What was changed
- Why the change was made
- Any challenges encountered

Closes #(issue_number)
-->

---

## 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/devGuide/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/devGuide/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/devGuide/HowToAddNewLanguage.md#add-new-translation-tags)
(for new translation tags only)

### Translations (if applicable)

- [ ] I ran
[`scripts/counter_translation.py`](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/docs/counter_translation.md)

### 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/devGuide/DeveloperGuide.md#6-testing)
for more details.

---------

Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
Co-authored-by: Anthony Stirling <77850077+Frooodle@users.noreply.github.com>
Co-authored-by: Reece Browne <74901996+reecebrowne@users.noreply.github.com>
2025-12-27 01:32:55 +00:00
..
bulkselection Feature/v2/extract pages (#4828) 2025-11-06 13:57:31 +00:00
automationExecutor.ts Fix-convert-V2 (#5147) 2025-12-03 17:39:49 +00:00
automationFileProcessor.ts More fixes for automate (#5168) 2025-12-04 17:53:08 +00:00
browserIdentifier.ts activeUsers (#4936) 2025-11-19 12:35:35 +00:00
clickHandlers.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
convertUtils.test.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
convertUtils.ts Fix-convert-V2 (#5147) 2025-12-03 17:39:49 +00:00
cropCoordinates.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
downloadUtils.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
editTableOfContents.ts Add edit table of contents tool to React UI (#4917) 2025-11-18 15:07:12 +00:00
fileHash.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
fileHistoryUtils.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
fileIdSafety.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
fileResponseUtils.test.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
fileResponseUtils.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
fileUtils.test.ts Handle non-pdf gracefully in viewer (#5004) 2025-11-25 21:27:47 +00:00
fileUtils.ts Fix-convert-V2 (#5147) 2025-12-03 17:39:49 +00:00
fuzzySearch.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
genericUtils.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
hotkeys.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
imageTransparency.ts [V2] feat(sign): add automatic white background removal for signature images (#5210) 2025-12-26 23:50:21 +00:00
languageMapping.ts consolidate english language to use gb (#5002) 2025-11-25 15:15:44 +00:00
pageMetadata.ts Viewer update and autozoom (#4800) 2025-11-10 13:52:13 +00:00
pageSelection.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
resourceManager.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
scarfTracking.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
scriptLoader.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
settingsNavigation.ts Add audit system, invite links, and usage analytics (#4749) 2025-11-06 17:29:34 +00:00
settingsPendingHelper.ts Add audit system, invite links, and usage analytics (#4749) 2025-11-06 17:29:34 +00:00
sidebarUtils.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
signatureFlattening.ts Feature/v2/saved signatures (#4899) 2025-11-19 17:30:01 +00:00
signaturePreview.ts Feature/sign placement UI (#4891) 2025-11-19 12:53:25 +00:00
storageUtils.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
textDiff.ts Feature/v2/compare tool (#4751) 2025-11-12 14:54:01 +00:00
textUtils.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
thumbnailUtils.ts Add automatic unlock prompt for encrypted PDFs (#4912) 2025-11-20 14:54:41 +00:00
toolErrorHandler.ts Add automatic unlock prompt for encrypted PDFs (#4912) 2025-11-20 14:54:41 +00:00
toolResponseProcessor.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
toolSearch.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
toolSynonyms.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
urlMapping.ts [V2] feat(convert): add support for CBR to PDF and PDF to CBR conversions (#4833) 2025-12-27 01:32:55 +00:00
urlRouting.ts Restructure frontend code to allow for extensions (#4721) 2025-10-28 10:29:36 +00:00
viewerZoom.ts Chore/v2/fix auto zoom (#4903) 2025-11-18 13:43:52 +00:00