From 9d362b1cf8e8895cd4bdc666e031db08cb19d26d Mon Sep 17 00:00:00 2001 From: alam00000 Date: Thu, 26 Mar 2026 12:55:50 +0530 Subject: [PATCH] feat: enable loading of encrypted PDFs by adding ignoreEncryption option --- src/js/logic/add-attachments-page.ts | 4 +++- src/js/logic/add-blank-page-page.ts | 1 + src/js/logic/background-color-page.ts | 4 +++- src/js/logic/bates-numbering-page.ts | 4 +++- src/js/logic/combine-single-page-page.ts | 1 + src/js/logic/delete-pages-page.ts | 1 + src/js/logic/divide-pages-page.ts | 4 +++- src/js/logic/edit-metadata-page.ts | 1 + src/js/logic/extract-pages-page.ts | 1 + src/js/logic/form-creator.ts | 4 +++- src/js/logic/header-footer-page.ts | 4 +++- src/js/logic/invert-colors-page.ts | 4 +++- src/js/logic/n-up-pdf-page.ts | 1 + src/js/logic/organize-pdf-page.ts | 1 + src/js/logic/page-dimensions-page.ts | 4 +++- src/js/logic/page-numbers-page.ts | 4 +++- src/js/logic/remove-annotations-page.ts | 4 +++- src/js/logic/remove-blank-pages-page.ts | 4 +++- src/js/logic/remove-metadata-page.ts | 4 +++- src/js/logic/rotate-custom-page.ts | 1 + src/js/logic/rotate-pdf-page.ts | 1 + src/js/logic/split-pdf-page.ts | 8 ++++++-- src/js/logic/text-color-page.ts | 4 +++- src/js/utils/password-prompt.ts | 4 ++-- 24 files changed, 56 insertions(+), 17 deletions(-) diff --git a/src/js/logic/add-attachments-page.ts b/src/js/logic/add-attachments-page.ts index 0bf01e8..9883e48 100644 --- a/src/js/logic/add-attachments-page.ts +++ b/src/js/logic/add-attachments-page.ts @@ -139,7 +139,9 @@ async function updateUI() { pageState.file = result.file; showLoader('Loading PDF...'); - pageState.pdfDoc = await PDFLibDocument.load(result.bytes); + pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, + }); const pageCount = pageState.pdfDoc.getPageCount(); metaSpan.textContent = `${formatBytes(pageState.file.size)} • ${pageCount} pages`; diff --git a/src/js/logic/add-blank-page-page.ts b/src/js/logic/add-blank-page-page.ts index 439b6b6..d509400 100644 --- a/src/js/logic/add-blank-page-page.ts +++ b/src/js/logic/add-blank-page-page.ts @@ -85,6 +85,7 @@ async function updateUI() { showLoader('Loading PDF...'); pageState.file = result.file; pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, throwOnInvalidObject: false, }); result.pdf.destroy(); diff --git a/src/js/logic/background-color-page.ts b/src/js/logic/background-color-page.ts index 1b9579b..c3a9686 100644 --- a/src/js/logic/background-color-page.ts +++ b/src/js/logic/background-color-page.ts @@ -63,7 +63,9 @@ async function handleFiles(files: FileList) { if (!result) return; showLoader('Loading PDF...'); result.pdf.destroy(); - pageState.pdfDoc = await PDFLibDocument.load(result.bytes); + pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, + }); pageState.file = result.file; updateFileDisplay(); document.getElementById('options-panel')?.classList.remove('hidden'); diff --git a/src/js/logic/bates-numbering-page.ts b/src/js/logic/bates-numbering-page.ts index df6ae5d..be4cdda 100644 --- a/src/js/logic/bates-numbering-page.ts +++ b/src/js/logic/bates-numbering-page.ts @@ -184,7 +184,9 @@ async function handleFiles(fileList: FileList) { if (!result) continue; showLoader('Loading PDFs...'); result.pdf.destroy(); - const pdfDoc = await PDFDocument.load(result.bytes); + const pdfDoc = await PDFDocument.load(result.bytes, { + ignoreEncryption: true, + }); files.push({ file: result.file, pageCount: pdfDoc.getPageCount() }); } diff --git a/src/js/logic/combine-single-page-page.ts b/src/js/logic/combine-single-page-page.ts index a9fa74c..2e6a297 100644 --- a/src/js/logic/combine-single-page-page.ts +++ b/src/js/logic/combine-single-page-page.ts @@ -82,6 +82,7 @@ async function updateUI() { result.pdf.destroy(); pageState.file = result.file; pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, throwOnInvalidObject: false, }); hideLoader(); diff --git a/src/js/logic/delete-pages-page.ts b/src/js/logic/delete-pages-page.ts index 59f831e..cdea5db 100644 --- a/src/js/logic/delete-pages-page.ts +++ b/src/js/logic/delete-pages-page.ts @@ -95,6 +95,7 @@ async function handleFile(file: File) { showLoader('Loading PDF...'); deleteState.file = result.file; deleteState.pdfDoc = await PDFDocument.load(result.bytes, { + ignoreEncryption: true, throwOnInvalidObject: false, }); deleteState.pdfJsDoc = result.pdf; diff --git a/src/js/logic/divide-pages-page.ts b/src/js/logic/divide-pages-page.ts index e48d207..fa592a4 100644 --- a/src/js/logic/divide-pages-page.ts +++ b/src/js/logic/divide-pages-page.ts @@ -87,7 +87,9 @@ async function updateUI() { pageState.file = result.file; showLoader('Loading PDF...'); - pageState.pdfDoc = await PDFLibDocument.load(result.bytes); + pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, + }); pageState.totalPages = pageState.pdfDoc.getPageCount(); hideLoader(); diff --git a/src/js/logic/edit-metadata-page.ts b/src/js/logic/edit-metadata-page.ts index 3c9cb6e..f6c0543 100644 --- a/src/js/logic/edit-metadata-page.ts +++ b/src/js/logic/edit-metadata-page.ts @@ -229,6 +229,7 @@ async function updateUI() { result.pdf.destroy(); pageState.file = result.file; pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, throwOnInvalidObject: false, }); hideLoader(); diff --git a/src/js/logic/extract-pages-page.ts b/src/js/logic/extract-pages-page.ts index 9a3a6fc..1da72a4 100644 --- a/src/js/logic/extract-pages-page.ts +++ b/src/js/logic/extract-pages-page.ts @@ -100,6 +100,7 @@ async function handleFile(file: File) { extractState.file = result.file; result.pdf.destroy(); extractState.pdfDoc = await PDFDocument.load(result.bytes, { + ignoreEncryption: true, throwOnInvalidObject: false, }); extractState.totalPages = extractState.pdfDoc.getPageCount(); diff --git a/src/js/logic/form-creator.ts b/src/js/logic/form-creator.ts index 994708e..dfcc392 100644 --- a/src/js/logic/form-creator.ts +++ b/src/js/logic/form-creator.ts @@ -3140,7 +3140,9 @@ async function handlePdfUpload(file: File) { if (!result) return; const arrayBuffer = result.bytes; uploadedPdfjsDoc = result.pdf; - uploadedPdfDoc = await PDFDocument.load(arrayBuffer); + uploadedPdfDoc = await PDFDocument.load(arrayBuffer, { + ignoreEncryption: true, + }); // Check for existing fields and update counter existingFieldNames.clear(); diff --git a/src/js/logic/header-footer-page.ts b/src/js/logic/header-footer-page.ts index d342603..2dc2d88 100644 --- a/src/js/logic/header-footer-page.ts +++ b/src/js/logic/header-footer-page.ts @@ -68,7 +68,9 @@ async function handleFiles(files: FileList) { if (!result) return; showLoader('Loading PDF...'); - pageState.pdfDoc = await PDFLibDocument.load(result.bytes); + pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, + }); pageState.file = result.file; result.pdf.destroy(); diff --git a/src/js/logic/invert-colors-page.ts b/src/js/logic/invert-colors-page.ts index c9e2591..9a4b87f 100644 --- a/src/js/logic/invert-colors-page.ts +++ b/src/js/logic/invert-colors-page.ts @@ -70,7 +70,9 @@ async function handleFiles(files: FileList) { if (!result) return; showLoader('Loading PDF...'); result.pdf.destroy(); - pageState.pdfDoc = await PDFLibDocument.load(result.bytes); + pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, + }); pageState.file = result.file; updateFileDisplay(); document.getElementById('options-panel')?.classList.remove('hidden'); diff --git a/src/js/logic/n-up-pdf-page.ts b/src/js/logic/n-up-pdf-page.ts index 64a6d47..abe5b49 100644 --- a/src/js/logic/n-up-pdf-page.ts +++ b/src/js/logic/n-up-pdf-page.ts @@ -75,6 +75,7 @@ async function updateUI() { result.pdf.destroy(); pageState.file = result.file; pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, throwOnInvalidObject: false, }); hideLoader(); diff --git a/src/js/logic/organize-pdf-page.ts b/src/js/logic/organize-pdf-page.ts index 6c08c76..ea0803c 100644 --- a/src/js/logic/organize-pdf-page.ts +++ b/src/js/logic/organize-pdf-page.ts @@ -177,6 +177,7 @@ async function handleFile(file: File) { showLoader('Loading PDF...'); organizeState.pdfDoc = await PDFDocument.load(result.bytes, { + ignoreEncryption: true, throwOnInvalidObject: false, }); organizeState.pdfJsDoc = result.pdf; diff --git a/src/js/logic/page-dimensions-page.ts b/src/js/logic/page-dimensions-page.ts index 6144955..9d62e7e 100644 --- a/src/js/logic/page-dimensions-page.ts +++ b/src/js/logic/page-dimensions-page.ts @@ -341,7 +341,9 @@ async function handleFileSelect(files: FileList | null) { result.pdf.destroy(); pageState.file = result.file; - pageState.pdfDoc = await PDFDocument.load(result.bytes); + pageState.pdfDoc = await PDFDocument.load(result.bytes, { + ignoreEncryption: true, + }); updateUI(); analyzeAndDisplayDimensions(); } catch (e) { diff --git a/src/js/logic/page-numbers-page.ts b/src/js/logic/page-numbers-page.ts index 92259ef..4af659b 100644 --- a/src/js/logic/page-numbers-page.ts +++ b/src/js/logic/page-numbers-page.ts @@ -89,7 +89,9 @@ async function handleFiles(files: FileList) { if (!result) return; showLoader('Loading PDF...'); - pageState.pdfDoc = await PDFLibDocument.load(result.bytes); + pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, + }); pageState.file = result.file; result.pdf.destroy(); diff --git a/src/js/logic/remove-annotations-page.ts b/src/js/logic/remove-annotations-page.ts index 5aed913..cbea8a7 100644 --- a/src/js/logic/remove-annotations-page.ts +++ b/src/js/logic/remove-annotations-page.ts @@ -108,7 +108,9 @@ async function handleFileUpload(file: File) { if (!result) return; showLoader('Loading PDF...'); result.pdf.destroy(); - pageState.pdfDoc = await PDFDocument.load(result.bytes); + pageState.pdfDoc = await PDFDocument.load(result.bytes, { + ignoreEncryption: true, + }); pageState.file = result.file; updateFileDisplay(); document.getElementById('options-panel')?.classList.remove('hidden'); diff --git a/src/js/logic/remove-blank-pages-page.ts b/src/js/logic/remove-blank-pages-page.ts index 6ce1379..36f0e70 100644 --- a/src/js/logic/remove-blank-pages-page.ts +++ b/src/js/logic/remove-blank-pages-page.ts @@ -122,7 +122,9 @@ async function handleFileUpload(file: File) { if (!result) return; showLoader('Loading PDF...'); result.pdf.destroy(); - pageState.pdfDoc = await PDFDocument.load(result.bytes); + pageState.pdfDoc = await PDFDocument.load(result.bytes, { + ignoreEncryption: true, + }); pageState.file = result.file; pageState.detectedBlankPages = []; updateFileDisplay(); diff --git a/src/js/logic/remove-metadata-page.ts b/src/js/logic/remove-metadata-page.ts index 6f21385..a586e45 100644 --- a/src/js/logic/remove-metadata-page.ts +++ b/src/js/logic/remove-metadata-page.ts @@ -150,7 +150,9 @@ async function removeMetadata() { if (loaderModal) loaderModal.classList.remove('hidden'); if (loaderText) loaderText.textContent = 'Removing all metadata...'; result.pdf.destroy(); - const pdfDoc = await PDFDocument.load(result.bytes); + const pdfDoc = await PDFDocument.load(result.bytes, { + ignoreEncryption: true, + }); removeMetadataFromDoc(pdfDoc); diff --git a/src/js/logic/rotate-custom-page.ts b/src/js/logic/rotate-custom-page.ts index 459eb28..6238b6b 100644 --- a/src/js/logic/rotate-custom-page.ts +++ b/src/js/logic/rotate-custom-page.ts @@ -236,6 +236,7 @@ async function updateUI() { showLoader('Loading PDF...'); pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, throwOnInvalidObject: false, }); diff --git a/src/js/logic/rotate-pdf-page.ts b/src/js/logic/rotate-pdf-page.ts index 3d3d43a..885e493 100644 --- a/src/js/logic/rotate-pdf-page.ts +++ b/src/js/logic/rotate-pdf-page.ts @@ -208,6 +208,7 @@ async function updateUI() { showLoader('Loading PDF...'); pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, throwOnInvalidObject: false, }); diff --git a/src/js/logic/split-pdf-page.ts b/src/js/logic/split-pdf-page.ts index d344a27..9b71612 100644 --- a/src/js/logic/split-pdf-page.ts +++ b/src/js/logic/split-pdf-page.ts @@ -98,7 +98,9 @@ document.addEventListener('DOMContentLoaded', () => { } result.pdf.destroy(); state.files[0] = result.file; - state.pdfDoc = await PDFLibDocument.load(result.bytes); + state.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, + }); } // Update page count metaSpan.textContent = `${formatBytes(file.size)} • ${state.pdfDoc.getPageCount()} pages`; @@ -146,7 +148,9 @@ document.addEventListener('DOMContentLoaded', () => { } result.pdf.destroy(); state.files[0] = result.file; - state.pdfDoc = await PDFLibDocument.load(result.bytes); + state.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, + }); showLoader('Rendering page previews...'); } else { throw new Error('No PDF document loaded'); diff --git a/src/js/logic/text-color-page.ts b/src/js/logic/text-color-page.ts index e889190..853b104 100644 --- a/src/js/logic/text-color-page.ts +++ b/src/js/logic/text-color-page.ts @@ -75,7 +75,9 @@ async function handleFiles(files: FileList) { if (!result) return; showLoader('Loading PDF...'); result.pdf.destroy(); - pageState.pdfDoc = await PDFLibDocument.load(result.bytes); + pageState.pdfDoc = await PDFLibDocument.load(result.bytes, { + ignoreEncryption: true, + }); pageState.file = result.file; updateFileDisplay(); document.getElementById('options-panel')?.classList.remove('hidden'); diff --git a/src/js/utils/password-prompt.ts b/src/js/utils/password-prompt.ts index 3b201f8..6e72572 100644 --- a/src/js/utils/password-prompt.ts +++ b/src/js/utils/password-prompt.ts @@ -792,7 +792,7 @@ export async function loadPdfWithPasswordPrompt( let currentFile = file; try { - const pdf = await getPDFDocument(bytes).promise; + const pdf = await getPDFDocument(bytes.slice(0)).promise; return { pdf, bytes, file: currentFile }; } catch (err: unknown) { if ( @@ -808,7 +808,7 @@ export async function loadPdfWithPasswordPrompt( files[index] = decryptedFile; } bytes = (await readFileAsArrayBuffer(decryptedFile)) as ArrayBuffer; - const pdf = await getPDFDocument(bytes).promise; + const pdf = await getPDFDocument(bytes.slice(0)).promise; return { pdf, bytes, file: currentFile }; } throw err;