diff --git a/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/PdfViewer/PdfViewer_Demo_05_Password_Protected_B_Prompt_For_Password.razor b/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/PdfViewer/PdfViewer_Demo_05_Password_Protected_B_Prompt_For_Password.razor index 2611b5a7d..f09dfbfc4 100644 --- a/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/PdfViewer/PdfViewer_Demo_05_Password_Protected_B_Prompt_For_Password.razor +++ b/BlazorBootstrap.Demo.RCL/Components/Pages/Demos/PdfViewer/PdfViewer_Demo_05_Password_Protected_B_Prompt_For_Password.razor @@ -1,6 +1,8 @@ @if (showPdfViewer) { - + } else { @@ -9,4 +11,6 @@ else @code { private bool showPdfViewer = false; + + private void OnDocumentLoadError(string errorMessage) => showPdfViewer = false; } \ No newline at end of file diff --git a/blazorbootstrap/wwwroot/blazor.bootstrap.pdf.js b/blazorbootstrap/wwwroot/blazor.bootstrap.pdf.js index 3769918b8..b899d4b15 100644 --- a/blazorbootstrap/wwwroot/blazor.bootstrap.pdf.js +++ b/blazorbootstrap/wwwroot/blazor.bootstrap.pdf.js @@ -210,15 +210,30 @@ export function initialize(dotNetHelper, elementId, scale, rotation, url, passwo // begin loading document const loadingTask = pdfJS.getDocument(options); + let passwordPromptCanceled = false; // handle password only when required (optional password support) loadingTask.onPassword = function (updatePassword, reason) { + if (passwordPromptCanceled) return; + if (reason === pdfJS.PasswordResponses.NEED_PASSWORD) { // only prompt if PDF actually requires password const password = prompt("This PDF is password protected. Enter password:"); + if (password === null) { + passwordPromptCanceled = true; + loadingTask.destroy(); + dotNetHelper.invokeMethodAsync('DocumentLoadError', "Password prompt canceled."); + return; + } updatePassword(password); } else if (reason === pdfJS.PasswordResponses.INCORRECT_PASSWORD) { const password = prompt("Incorrect password. Please try again:"); + if (password === null) { + passwordPromptCanceled = true; + loadingTask.destroy(); + dotNetHelper.invokeMethodAsync('DocumentLoadError', "Password prompt canceled."); + return; + } updatePassword(password); } };