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;