diff --git a/frontend/public/locales/en-GB/translation.json b/frontend/public/locales/en-GB/translation.json index a0f7a2666..a6a350200 100644 --- a/frontend/public/locales/en-GB/translation.json +++ b/frontend/public/locales/en-GB/translation.json @@ -3324,6 +3324,9 @@ "grayscale": { "label": "Apply Grayscale for Compression" }, + "linearize": { + "label": "Optimize PDF for faster web viewing" + }, "tooltip": { "header": { "title": "Compress Settings Overview" @@ -3341,6 +3344,10 @@ "grayscale": { "title": "Grayscale", "text": "Select this option to convert all images to black and white, which can significantly reduce file size especially for scanned PDFs or image-heavy documents." + }, + "linearize": { + "title": "Linearize", + "text": "Optimize PDF for faster web viewing by rearranging the PDF structure so the first page can be displayed quickly in web browsers." } }, "error": { diff --git a/frontend/src/core/components/tools/compress/CompressSettings.tsx b/frontend/src/core/components/tools/compress/CompressSettings.tsx index 398e0b7b4..fb5ed7bdd 100644 --- a/frontend/src/core/components/tools/compress/CompressSettings.tsx +++ b/frontend/src/core/components/tools/compress/CompressSettings.tsx @@ -129,6 +129,12 @@ const CompressSettings = ({ parameters, onParameterChange, disabled = false }: C disabled={disabled} label={t("compress.grayscale.label", "Apply Grayscale for compression")} /> + onParameterChange('linearize', event.currentTarget.checked)} + disabled={disabled} + label={t("compress.linearize.label", "Linearize PDF for faster web viewing")} + /> ); diff --git a/frontend/src/core/hooks/tools/compress/useCompressOperation.ts b/frontend/src/core/hooks/tools/compress/useCompressOperation.ts index 5b1417b21..c15e0981b 100644 --- a/frontend/src/core/hooks/tools/compress/useCompressOperation.ts +++ b/frontend/src/core/hooks/tools/compress/useCompressOperation.ts @@ -19,6 +19,7 @@ export const buildCompressFormData = (parameters: CompressParameters, file: File } formData.append("grayscale", parameters.grayscale.toString()); + formData.append("linearize", parameters.linearize.toString()); return formData; }; diff --git a/frontend/src/core/hooks/tools/compress/useCompressParameters.ts b/frontend/src/core/hooks/tools/compress/useCompressParameters.ts index 1ae9298f5..74540494d 100644 --- a/frontend/src/core/hooks/tools/compress/useCompressParameters.ts +++ b/frontend/src/core/hooks/tools/compress/useCompressParameters.ts @@ -8,6 +8,7 @@ export interface CompressParameters extends BaseParameters { compressionMethod: 'quality' | 'filesize'; fileSizeValue: string; fileSizeUnit: 'KB' | 'MB'; + linearize: boolean; } export const defaultParameters: CompressParameters = { @@ -17,6 +18,7 @@ export const defaultParameters: CompressParameters = { compressionMethod: 'quality', fileSizeValue: '', fileSizeUnit: 'MB', + linearize: false, }; export type CompressParametersHook = BaseParametersHook;