From 3f032ccea5c3b20a20430099fa5905a0d248eb21 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 18 Dec 2025 10:01:48 +0800 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=20pdf=20=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PdfReader.razor.js | 41 +++++++++---------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js index 224b89ef..bf25120e 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js @@ -526,23 +526,15 @@ const addToolbarEventHandlers = (el, pdfViewer, invoke, options) => { pdfViewer.spreadMode = 0; } }); - EventHandler.on(toolbar, "click", ".bb-view-download", e => { + EventHandler.on(toolbar, "click", ".bb-view-download", async e => { let fileName = el.getAttribute('data-bb-download'); - if (options.url) { - if (fileName === null) { - const docTitle = el.querySelector('.bb-view-subject'); - if (docTitle) { - fileName = docTitle.textContent; - } + if (fileName === null) { + const docTitle = el.querySelector('.bb-view-subject'); + if (docTitle) { + fileName = docTitle.textContent; } - downloadPdf(options.url, fileName); - } - else if (options.data) { - const blob = new Blob([options.data], { type: 'application/pdf' }); - const url = window.URL.createObjectURL(blob); - downloadPdf(url, fileName); - window.URL.revokeObjectURL(url); } + await downloadPdf(options, fileName); }); EventHandler.on(toolbar, "click", ".dropdown-item-presentation", async e => { @@ -571,16 +563,23 @@ const addToolbarEventHandlers = (el, pdfViewer, invoke, options) => { }); } -const downloadPdf = (url, fileName) => { +const downloadPdf = async (options, fileName) => { if (fileName === null) { fileName = "download.pdf"; } - const anchorElement = document.createElement('a'); - anchorElement.href = url; - anchorElement.download = fileName; - document.body.appendChild(anchorElement); - anchorElement.click(); - document.body.removeChild(anchorElement); + + await getPdfUrl(options, url => { + const anchorElement = document.createElement('a'); + anchorElement.href = url; + anchorElement.download = fileName; + document.body.appendChild(anchorElement); + anchorElement.click(); + document.body.removeChild(anchorElement); + + return new Promise((resolve, reject) => { + resolve(); + }); + }); } const removeToolbarEventHandlers = el => { From dcafa17b91f3b191e008d240e6f80ea75639c631 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 18 Dec 2025 10:02:20 +0800 Subject: [PATCH 2/3] feat(PdfReader): print pdf function support stream --- .../PdfReader.razor.js | 53 +++++++++++++------ 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js index bf25120e..81f6a463 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js @@ -192,6 +192,11 @@ const disposePdf = pdf => { if (thumbnailsContainer) { thumbnailsContainer.innerHTML = ""; } + + const iframe = el.querySelector(".bb-view-print-iframe"); + if (iframe) { + iframe.remove(); + } } } @@ -513,7 +518,7 @@ const addToolbarEventHandlers = (el, pdfViewer, invoke, options) => { rotateView(pdfViewer, 90); }); EventHandler.on(toolbar, "click", ".bb-view-print", async e => { - printPdf(options.url); + await printPdf(el, options); await invoke.invokeMethodAsync("Printing"); }) EventHandler.on(toolbar, "click", ".dropdown-item-pages", async e => { @@ -747,25 +752,39 @@ const makeThumb = async page => { return canvas; } -const printPdf = url => { - let iframe = document.querySelector(".bb-view-print-iframe"); - if (iframe) { - iframe.remove(); +const printPdf = async (el, options) => { + let iframe = el.querySelector(".bb-view-print-iframe"); + if (iframe === null) { + iframe = document.createElement("iframe"); + iframe.classList.add("bb-view-print-iframe"); + iframe.style.position = "fixed"; + iframe.style.right = "100%"; + iframe.style.bottom = "100%"; + el.appendChild(iframe); } - iframe = document.createElement("iframe"); - iframe.classList.add("bb-view-print-iframe"); - iframe.style.position = "fixed"; - iframe.style.right = "100%"; - iframe.style.bottom = "100%"; - iframe.src = url; - - iframe.onload = () => { - iframe.contentWindow.focus(); - iframe.contentWindow.print(); - }; + await getPdfUrl(options, url => { + iframe.src = url; + iframe.onload = () => { + iframe.contentWindow.focus(); + iframe.contentWindow.print(); + }; + return new Promise((resolve, reject) => { + resolve(); + }); + }); +} - document.body.appendChild(iframe); +const getPdfUrl = async (options, callback) => { + if (options.url) { + callback(options.url); + } + else if (options.data) { + const blob = new Blob([options.data], { type: 'application/pdf' }); + var url = window.URL.createObjectURL(blob); + await callback(url); + window.URL.revokeObjectURL(url); + } } export function dispose(id) { From 93eb598752196210dd7eaa83b42f1511558cae49 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Thu, 18 Dec 2025 10:02:40 +0800 Subject: [PATCH 3/3] chore: bump version 10.0.21 --- .../BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj b/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj index c972bf8f..2b388319 100644 --- a/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj +++ b/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj @@ -1,7 +1,7 @@  - 10.0.20 + 10.0.21