diff --git a/frontend/public/locales/en-GB/translation.toml b/frontend/public/locales/en-GB/translation.toml index a69ed9cdf..3b7797f9e 100644 --- a/frontend/public/locales/en-GB/translation.toml +++ b/frontend/public/locales/en-GB/translation.toml @@ -2389,6 +2389,11 @@ note = "Flattening removes interactive elements from the PDF, making them non-ed label = "Flatten only forms" desc = "Only flatten form fields, leaving other interactive elements intact" +[flatten.renderDpi] +label = "Rendering DPI (optional, recommended 150 DPI)" +help = "Leave blank to use the system default. Higher DPI sharpens output but increases processing time and file size." +placeholder = "e.g. 150" + [flatten.results] title = "Flatten Results" diff --git a/frontend/src/core/components/tools/flatten/FlattenSettings.tsx b/frontend/src/core/components/tools/flatten/FlattenSettings.tsx index ae8b1ecf5..b8e97f8ef 100644 --- a/frontend/src/core/components/tools/flatten/FlattenSettings.tsx +++ b/frontend/src/core/components/tools/flatten/FlattenSettings.tsx @@ -1,4 +1,4 @@ -import { Stack, Text, Checkbox } from "@mantine/core"; +import { Stack, Text, Checkbox, NumberInput } from "@mantine/core"; import { useTranslation } from "react-i18next"; import { FlattenParameters } from "@app/hooks/tools/flatten/useFlattenParameters"; @@ -28,6 +28,20 @@ const FlattenSettings = ({ parameters, onParameterChange, disabled = false }: Fl } /> + + {!parameters.flattenOnlyForms && ( + onParameterChange('renderDpi', value != null && value !== '' ? Number(value) : undefined)} + disabled={disabled} + min={72} + max={2400} + step={50} + /> + )} ); }; diff --git a/frontend/src/core/hooks/tools/flatten/useFlattenOperation.ts b/frontend/src/core/hooks/tools/flatten/useFlattenOperation.ts index f36b9d078..49b83a0bb 100644 --- a/frontend/src/core/hooks/tools/flatten/useFlattenOperation.ts +++ b/frontend/src/core/hooks/tools/flatten/useFlattenOperation.ts @@ -8,6 +8,9 @@ export const buildFlattenFormData = (parameters: FlattenParameters, file: File): const formData = new FormData(); formData.append('fileInput', file); formData.append('flattenOnlyForms', parameters.flattenOnlyForms.toString()); + if (parameters.renderDpi != null) { + formData.append('renderDpi', parameters.renderDpi.toString()); + } return formData; }; diff --git a/frontend/src/core/hooks/tools/flatten/useFlattenParameters.ts b/frontend/src/core/hooks/tools/flatten/useFlattenParameters.ts index af47ab3e1..3a383d674 100644 --- a/frontend/src/core/hooks/tools/flatten/useFlattenParameters.ts +++ b/frontend/src/core/hooks/tools/flatten/useFlattenParameters.ts @@ -3,10 +3,12 @@ import { useBaseParameters, BaseParametersHook } from '@app/hooks/tools/shared/u export interface FlattenParameters extends BaseParameters { flattenOnlyForms: boolean; + renderDpi?: number; } export const defaultParameters: FlattenParameters = { flattenOnlyForms: false, + renderDpi: undefined, }; export type FlattenParametersHook = BaseParametersHook;