diff --git a/public/locales/en/tools.json b/public/locales/en/tools.json index ec970815..68f32fbd 100644 --- a/public/locales/en/tools.json +++ b/public/locales/en/tools.json @@ -19,7 +19,8 @@ "name": "Merge PDF", "subtitle": "Combine multiple PDFs into one file. Preserves Bookmarks.", "retainPageLabels": "Keep original page labels from each file", - "retainPageLabelsHint": "Off (default): the merged PDF uses natural page numbering 1–N. On: each file's original page labels are preserved (may produce duplicate labels)." + "retainPageLabelsHint": "Off (default): the merged PDF uses natural page numbering 1–N. On: each file's original page labels are preserved (may produce duplicate labels).", + "removeDuplicateFonts": "Remove duplicate fonts" }, "splitPdf": { "name": "Split PDF", diff --git a/public/workers/merge.worker.js b/public/workers/merge.worker.js index 6f536962..022441c2 100644 --- a/public/workers/merge.worker.js +++ b/public/workers/merge.worker.js @@ -21,7 +21,14 @@ function loadCpdf(cpdfUrl) { } self.onmessage = async function (e) { - const { command, files, jobs, cpdfUrl, retainPageLabels } = e.data; + const { + command, + files, + jobs, + cpdfUrl, + retainPageLabels, + removeDuplicateFonts, + } = e.data; if (!cpdfUrl) { self.postMessage({ @@ -43,11 +50,16 @@ self.onmessage = async function (e) { } if (command === 'merge') { - mergePDFs(files, jobs, retainPageLabels === true); + mergePDFs( + files, + jobs, + retainPageLabels === true, + removeDuplicateFonts === true + ); } }; -function mergePDFs(files, jobs, retainPageLabels) { +function mergePDFs(files, jobs, retainPageLabels, removeDuplicateFonts) { try { const loadedPdfs = {}; const pdfsToMerge = []; @@ -90,7 +102,7 @@ function mergePDFs(files, jobs, retainPageLabels) { const mergedPdf = coherentpdf.mergeSame( pdfsToMerge, retainPageLabels, - true, + removeDuplicateFonts, rangesToMerge ); diff --git a/src/js/logic/merge-pdf-page.ts b/src/js/logic/merge-pdf-page.ts index 3ac4ca1f..8236d42a 100644 --- a/src/js/logic/merge-pdf-page.ts +++ b/src/js/logic/merge-pdf-page.ts @@ -389,12 +389,17 @@ export async function merge() { 'retain-page-labels' ) as HTMLInputElement | null; + const removeDuplicateFontsCheckbox = document.getElementById( + 'remove-duplicate-fonts' + ) as HTMLInputElement | null; + const message: MergeMessage = { command: 'merge', files: filesToMerge, jobs: jobs, cpdfUrl: WasmProvider.getUrl('cpdf')! + 'coherentpdf.browser.min.js', retainPageLabels: retainCheckbox?.checked ?? false, + removeDuplicateFonts: removeDuplicateFontsCheckbox?.checked ?? false, }; mergeWorker.postMessage( diff --git a/src/js/types/merge-worker-type.ts b/src/js/types/merge-worker-type.ts index 1e093602..d473a9ff 100644 --- a/src/js/types/merge-worker-type.ts +++ b/src/js/types/merge-worker-type.ts @@ -18,6 +18,7 @@ export interface MergeMessage { jobs: MergeJob[]; cpdfUrl?: string; retainPageLabels?: boolean; + removeDuplicateFonts?: boolean; } export interface MergeSuccessResponse { diff --git a/src/pages/merge-pdf.html b/src/pages/merge-pdf.html index 6899d2a8..de1f8a74 100644 --- a/src/pages/merge-pdf.html +++ b/src/pages/merge-pdf.html @@ -270,6 +270,22 @@ + +