From c454a72f08b974e474e706aff65c7ff457a3c2a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Sz=C3=BCcs?= <127139797+balazs-szucs@users.noreply.github.com> Date: Mon, 22 Dec 2025 16:47:12 +0100 Subject: [PATCH] [V2] feat(compress): add linearize option for fast web viewing (#5280) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description of Changes This pull request adds a new "Linearize PDF" option to the PDF compression tool, enabling users to optimize PDFs for fast web viewing. The change includes updates to the user interface, parameters, and form data handling to support this feature. **User Interface Updates:** - Added a new checkbox labeled "Linearize PDF for fast web viewing" to the compression settings UI, allowing users to enable or disable PDF linearization. **Localization:** - Introduced a new localization string for the "Linearize PDF for fast web viewing" label in the English (UK) translation file. **Parameter Handling:** - Updated the `CompressParameters` interface and default parameters to include a `linearize` boolean flag. - Modified the form data builder to append the `linearize` parameter when submitting compression requests. image --- ## 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 --- frontend/public/locales/en-GB/translation.toml | 3 +++ .../components/tools/compress/CompressSettings.tsx | 11 +++++++++++ .../core/hooks/tools/compress/useCompressOperation.ts | 1 + .../hooks/tools/compress/useCompressParameters.ts | 2 ++ 4 files changed, 17 insertions(+) diff --git a/frontend/public/locales/en-GB/translation.toml b/frontend/public/locales/en-GB/translation.toml index eb56fabe7..3631875c8 100644 --- a/frontend/public/locales/en-GB/translation.toml +++ b/frontend/public/locales/en-GB/translation.toml @@ -3736,6 +3736,9 @@ filesize = "File Size" [compress.grayscale] label = "Apply Grayscale for Compression" +[compress.linearize] +label = "Linearize PDF for fast web viewing" + [compress.lineArt] label = "Convert images to line art" description = "Uses ImageMagick to reduce pages to high-contrast black and white for maximum size reduction." diff --git a/frontend/src/core/components/tools/compress/CompressSettings.tsx b/frontend/src/core/components/tools/compress/CompressSettings.tsx index f444da263..9dc6d2ca5 100644 --- a/frontend/src/core/components/tools/compress/CompressSettings.tsx +++ b/frontend/src/core/components/tools/compress/CompressSettings.tsx @@ -144,6 +144,17 @@ const CompressSettings = ({ parameters, onParameterChange, disabled = false }: C disabled={disabled} label={t("compress.grayscale.label", "Apply Grayscale for compression")} /> + + {/* Linearize Option */} + + onParameterChange('linearize', event.currentTarget.checked)} + disabled={disabled} + label={t("compress.linearize.label", "Linearize PDF for fast web viewing")} + /> + + onParameterChange('lineArt', event.currentTarget.checked)} diff --git a/frontend/src/core/hooks/tools/compress/useCompressOperation.ts b/frontend/src/core/hooks/tools/compress/useCompressOperation.ts index 8e8f27b33..e1dda9d0f 100644 --- a/frontend/src/core/hooks/tools/compress/useCompressOperation.ts +++ b/frontend/src/core/hooks/tools/compress/useCompressOperation.ts @@ -20,6 +20,7 @@ export const buildCompressFormData = (parameters: CompressParameters, file: File formData.append("grayscale", parameters.grayscale.toString()); formData.append("lineArt", parameters.lineArt.toString()); + formData.append("linearize", parameters.linearize.toString()); if (parameters.lineArt) { formData.append("lineArtThreshold", parameters.lineArtThreshold.toString()); formData.append("lineArtEdgeLevel", parameters.lineArtEdgeLevel.toString()); diff --git a/frontend/src/core/hooks/tools/compress/useCompressParameters.ts b/frontend/src/core/hooks/tools/compress/useCompressParameters.ts index 16f80f1d1..1df68b6ad 100644 --- a/frontend/src/core/hooks/tools/compress/useCompressParameters.ts +++ b/frontend/src/core/hooks/tools/compress/useCompressParameters.ts @@ -11,6 +11,7 @@ export interface CompressParameters extends BaseParameters { compressionMethod: 'quality' | 'filesize'; fileSizeValue: string; fileSizeUnit: 'KB' | 'MB'; + linearize: boolean; } export const defaultParameters: CompressParameters = { @@ -23,6 +24,7 @@ export const defaultParameters: CompressParameters = { compressionMethod: 'quality', fileSizeValue: '', fileSizeUnit: 'MB', + linearize: false, }; export type CompressParametersHook = BaseParametersHook;