diff --git a/frontend/public/locales/en-GB/translation.json b/frontend/public/locales/en-GB/translation.json
index b7875c314..5ce84331e 100644
--- a/frontend/public/locales/en-GB/translation.json
+++ b/frontend/public/locales/en-GB/translation.json
@@ -697,7 +697,8 @@
"bySize": "Split by File Size",
"byPageCount": "Split by Page Count",
"byDocCount": "Split by Document Count",
- "byChapters": "Split by Chapters"
+ "byChapters": "Split by Chapters",
+ "byPageDivider": "Split by Page Divider"
},
"value": {
"fileSize": {
diff --git a/frontend/src/components/tools/split/SplitSettings.tsx b/frontend/src/components/tools/split/SplitSettings.tsx
index 98a612c41..3df1eabd4 100644
--- a/frontend/src/components/tools/split/SplitSettings.tsx
+++ b/frontend/src/components/tools/split/SplitSettings.tsx
@@ -1,4 +1,5 @@
-import { Stack, TextInput, Select, Checkbox } from '@mantine/core';
+import { Stack, TextInput, Select, Checkbox, Anchor } from '@mantine/core';
+import LocalIcon from '../../shared/LocalIcon';
import { useTranslation } from 'react-i18next';
import { isSplitMethod, SPLIT_METHODS } from '../../../constants/splitConstants';
import { SplitParameters } from '../../../hooks/tools/split/useSplitParameters';
@@ -113,6 +114,27 @@ const SplitSettings = ({
);
+ const renderByPageDividerForm = () => (
+
+
+
+ {t("autoSplitPDF.dividerDownload2", "Download 'Auto Splitter Divider (with instructions).pdf'")}
+
+
+ onParameterChange('duplexMode', e.currentTarget.checked)}
+ disabled={disabled}
+ />
+
+ );
+
return (
{/* Method Selector */}
@@ -129,6 +151,7 @@ const SplitSettings = ({
{ value: SPLIT_METHODS.BY_PAGE_COUNT, label: t("split.methods.byPageCount", "Split by Page Count") },
{ value: SPLIT_METHODS.BY_DOC_COUNT, label: t("split.methods.byDocCount", "Split by Document Count") },
{ value: SPLIT_METHODS.BY_CHAPTERS, label: t("split.methods.byChapters", "Split by Chapters") },
+ { value: SPLIT_METHODS.BY_PAGE_DIVIDER, label: t("split.methods.byPageDivider", "Split by Page Divider") },
]}
/>
@@ -139,6 +162,7 @@ const SplitSettings = ({
parameters.method === SPLIT_METHODS.BY_PAGE_COUNT ||
parameters.method === SPLIT_METHODS.BY_DOC_COUNT) && renderSplitValueForm()}
{parameters.method === SPLIT_METHODS.BY_CHAPTERS && renderByChaptersForm()}
+ {parameters.method === SPLIT_METHODS.BY_PAGE_DIVIDER && renderByPageDividerForm()}
);
}
diff --git a/frontend/src/components/tooltips/useSplitTips.ts b/frontend/src/components/tooltips/useSplitTips.ts
index ff655aabe..9389c3bc3 100644
--- a/frontend/src/components/tooltips/useSplitTips.ts
+++ b/frontend/src/components/tooltips/useSplitTips.ts
@@ -53,6 +53,17 @@ export const useSplitTips = (): TooltipContent => {
t("split.tooltip.byChapters.bullet2", "Include Metadata: Preserve document properties"),
t("split.tooltip.byChapters.bullet3", "Allow Duplicates: Handle repeated bookmark names")
]
+ },
+ {
+ title: t("split.tooltip.byPageDivider.title", "Split by Page Divider"),
+ description: t("split.tooltip.byPageDivider.text", "Automatically split scanned documents using physical divider sheets with QR codes. Perfect for processing multiple documents scanned together."),
+ bullets: [
+ t("split.tooltip.byPageDivider.bullet1", "Print divider sheets from the download link"),
+ t("split.tooltip.byPageDivider.bullet2", "Insert divider sheets between your documents"),
+ t("split.tooltip.byPageDivider.bullet3", "Scan all documents together as one PDF"),
+ t("split.tooltip.byPageDivider.bullet4", "Upload - divider pages are automatically detected and removed"),
+ t("split.tooltip.byPageDivider.bullet5", "Enable Duplex Mode if scanning both sides of divider sheets")
+ ]
}
]
};
diff --git a/frontend/src/constants/splitConstants.ts b/frontend/src/constants/splitConstants.ts
index 896e4bc44..31f09794e 100644
--- a/frontend/src/constants/splitConstants.ts
+++ b/frontend/src/constants/splitConstants.ts
@@ -4,7 +4,8 @@ export const SPLIT_METHODS = {
BY_SIZE: 'bySize',
BY_PAGE_COUNT: 'byPageCount',
BY_DOC_COUNT: 'byDocCount',
- BY_CHAPTERS: 'byChapters'
+ BY_CHAPTERS: 'byChapters',
+ BY_PAGE_DIVIDER: 'byPageDivider'
} as const;
@@ -14,7 +15,8 @@ export const ENDPOINTS = {
[SPLIT_METHODS.BY_SIZE]: 'split-by-size-or-count',
[SPLIT_METHODS.BY_PAGE_COUNT]: 'split-by-size-or-count',
[SPLIT_METHODS.BY_DOC_COUNT]: 'split-by-size-or-count',
- [SPLIT_METHODS.BY_CHAPTERS]: 'split-pdf-by-chapters'
+ [SPLIT_METHODS.BY_CHAPTERS]: 'split-pdf-by-chapters',
+ [SPLIT_METHODS.BY_PAGE_DIVIDER]: 'auto-split-pdf'
} as const;
export type SplitMethod = typeof SPLIT_METHODS[keyof typeof SPLIT_METHODS];
diff --git a/frontend/src/hooks/tools/split/useSplitOperation.ts b/frontend/src/hooks/tools/split/useSplitOperation.ts
index b7ad93af0..938a600d9 100644
--- a/frontend/src/hooks/tools/split/useSplitOperation.ts
+++ b/frontend/src/hooks/tools/split/useSplitOperation.ts
@@ -38,6 +38,9 @@ export const buildSplitFormData = (parameters: SplitParameters, file: File): For
formData.append("includeMetadata", parameters.includeMetadata.toString());
formData.append("allowDuplicates", parameters.allowDuplicates.toString());
break;
+ case SPLIT_METHODS.BY_PAGE_DIVIDER:
+ formData.append("duplexMode", parameters.duplexMode.toString());
+ break;
default:
throw new Error(`Unknown split method: ${parameters.method}`);
}
@@ -57,6 +60,8 @@ export const getSplitEndpoint = (parameters: SplitParameters): string => {
return "/api/v1/general/split-by-size-or-count";
case SPLIT_METHODS.BY_CHAPTERS:
return "/api/v1/general/split-pdf-by-chapters";
+ case SPLIT_METHODS.BY_PAGE_DIVIDER:
+ return "/api/v1/misc/auto-split-pdf";
default:
throw new Error(`Unknown split method: ${parameters.method}`);
}
diff --git a/frontend/src/hooks/tools/split/useSplitParameters.ts b/frontend/src/hooks/tools/split/useSplitParameters.ts
index 09b1ff1c9..8d77604e5 100644
--- a/frontend/src/hooks/tools/split/useSplitParameters.ts
+++ b/frontend/src/hooks/tools/split/useSplitParameters.ts
@@ -12,6 +12,7 @@ export interface SplitParameters extends BaseParameters {
bookmarkLevel: string;
includeMetadata: boolean;
allowDuplicates: boolean;
+ duplexMode: boolean;
}
export type SplitParametersHook = BaseParametersHook;
@@ -26,6 +27,7 @@ export const defaultParameters: SplitParameters = {
bookmarkLevel: '1',
includeMetadata: false,
allowDuplicates: false,
+ duplexMode: false,
};
export const useSplitParameters = (): SplitParametersHook => {
@@ -49,6 +51,8 @@ export const useSplitParameters = (): SplitParametersHook => {
return params.splitValue.trim() !== "";
case SPLIT_METHODS.BY_CHAPTERS:
return params.bookmarkLevel !== "";
+ case SPLIT_METHODS.BY_PAGE_DIVIDER:
+ return true; // No required parameters
default:
return false;
}