From b9805425327c55adcd26d60b1f74dccf737830d3 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Tue, 25 Nov 2025 11:17:28 +0800 Subject: [PATCH 1/7] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E4=B8=A4?= =?UTF-8?q?=E9=A1=B5=E8=A7=86=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BootstrapBlazor.PdfReader/PdfReader.razor | 3 +- .../PdfReader.razor.js | 29 ++++++++++++++----- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor index 936b3d4d..1f02db1d 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor @@ -32,6 +32,7 @@ }
-
+
+
diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js index 07a451d3..accbb7f1 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js @@ -35,19 +35,32 @@ export async function init(id, invoke, options) { } }; - const container = el.querySelector(".bb-view-container"); - const eventBus = new pdfjsViewer.EventBus(); - const pdfViewer = new pdfjsViewer.PDFViewer({ - container, - eventBus + const eventBusLeft = new pdfjsViewer.EventBus(); + const pdfViewerLeft = new pdfjsViewer.PDFViewer({ + container: el.querySelector('.bb-view-container'), + viewer: el.querySelector('.viewer-left'), + eventBus: eventBusLeft, }); + const pdfViewerRight = new pdfjsViewer.PDFViewer({ + container: el.querySelector('.bb-view-container'), + viewer: el.querySelector('.viewer-right'), + eventBus: eventBusLeft, + }); + + // const container = el.querySelector(".bb-view-container"); + // const eventBus = new pdfjsViewer.EventBus(); + // const pdfViewer = new pdfjsViewer.PDFViewer({ + // container, + // eventBus + // }); - addEventListener(pdfViewer, eventBus, invoke, options); + addEventListener(pdfViewerLeft, eventBusLeft, invoke, options); const pdfDocument = await loadingTask.promise; - pdfViewer.setDocument(pdfDocument); + pdfViewerLeft.setDocument(pdfDocument); + pdfViewerRight.setDocument(pdfDocument); - Data.set(id, pdfViewer); + Data.set(id, pdfViewerLeft); } export function fitToWidth(id) { From b0a2b75548bcea65878a84b4e8db5dc7e22e85c9 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Tue, 25 Nov 2025 11:25:43 +0800 Subject: [PATCH 2/7] =?UTF-8?q?Revert=20"refactor:=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=B8=A4=E9=A1=B5=E8=A7=86=E5=9B=BE"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit b9805425327c55adcd26d60b1f74dccf737830d3. --- .../BootstrapBlazor.PdfReader/PdfReader.razor | 3 +- .../PdfReader.razor.js | 29 +++++-------------- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor index 1f02db1d..936b3d4d 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor @@ -32,7 +32,6 @@ }
-
-
+
diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js index accbb7f1..07a451d3 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js @@ -35,32 +35,19 @@ export async function init(id, invoke, options) { } }; - const eventBusLeft = new pdfjsViewer.EventBus(); - const pdfViewerLeft = new pdfjsViewer.PDFViewer({ - container: el.querySelector('.bb-view-container'), - viewer: el.querySelector('.viewer-left'), - eventBus: eventBusLeft, + const container = el.querySelector(".bb-view-container"); + const eventBus = new pdfjsViewer.EventBus(); + const pdfViewer = new pdfjsViewer.PDFViewer({ + container, + eventBus }); - const pdfViewerRight = new pdfjsViewer.PDFViewer({ - container: el.querySelector('.bb-view-container'), - viewer: el.querySelector('.viewer-right'), - eventBus: eventBusLeft, - }); - - // const container = el.querySelector(".bb-view-container"); - // const eventBus = new pdfjsViewer.EventBus(); - // const pdfViewer = new pdfjsViewer.PDFViewer({ - // container, - // eventBus - // }); - addEventListener(pdfViewerLeft, eventBusLeft, invoke, options); + addEventListener(pdfViewer, eventBus, invoke, options); const pdfDocument = await loadingTask.promise; - pdfViewerLeft.setDocument(pdfDocument); - pdfViewerRight.setDocument(pdfDocument); + pdfViewer.setDocument(pdfDocument); - Data.set(id, pdfViewerLeft); + Data.set(id, pdfViewer); } export function fitToWidth(id) { From 7b3659b5835f7179dd6153f7e6ce4e0b6bc16f40 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Tue, 25 Nov 2025 11:44:23 +0800 Subject: [PATCH 3/7] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=20tow=20page?= =?UTF-8?q?=20one=20view=20=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BootstrapBlazor.PdfReader.csproj | 5 ++++- src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj b/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj index c93454ea..88c04646 100644 --- a/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj +++ b/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj @@ -17,10 +17,13 @@ - + + + + diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js index 07a451d3..29c0c3e2 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js @@ -83,9 +83,12 @@ const addEventListener = (pdfViewer, eventBus, invoke, options) => { pdfViewer.currentScaleValue = "page-width"; } else { - pdfViewer.currentScaleValue = 1.0; + pdfViewer.currentScaleValue = "page-actual"; } + pdfViewer.currentScaleValue = 'auto'; + pdfViewer.spreadMode = 1; + const el = pdfViewer.container.parentElement; const numPages = pdfViewer.pagesCount; const countEl = el.querySelector(".bb-view-pagesCount"); From dc35378ba4a544eee015545f322d87c3df8a3d62 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 26 Nov 2025 08:07:41 +0800 Subject: [PATCH 4/7] chore: bump version 10.0.1-beta04 --- .../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 88c04646..a734f066 100644 --- a/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj +++ b/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj @@ -1,7 +1,7 @@  - 10.0.1-beta01 + 10.0.1-beta04 From 950e6e637ba8c6c600dc6a48840f904f39adbe31 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 26 Nov 2025 08:43:42 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E4=B8=A4?= =?UTF-8?q?=E9=A1=B5=E4=B8=80=E8=A7=86=E5=9B=BE=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BootstrapBlazor.PdfReader/PdfReader.razor | 10 +++++- .../PdfReader.razor.cs | 18 +++++++++- .../PdfReader.razor.css | 8 +++++ .../PdfReader.razor.js | 34 +++++++++++++++++-- .../PdfReaderOptions.cs | 15 ++++++++ 5 files changed, 80 insertions(+), 5 deletions(-) diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor index 3f6526c6..3b25e584 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor @@ -27,7 +27,15 @@
-
+ + + @if (Options.ShowTowPagesOnViewButton) + { + + } + +
} diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs index 2a42c5a3..f423406f 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs @@ -20,6 +20,12 @@ public partial class PdfReader [NotNull] public PdfReaderOptions? Options { get; set; } + /// + /// 获得/设置 更多按钮图标 默认为 null 使用内置图标 + /// + [Parameter] + public string? MoreButtonIcon { get; set; } + private string? ClassString => CssBuilder.Default("bb-pdf-reader") .AddClassFromAttributes(AdditionalAttributes) .Build(); @@ -38,6 +44,7 @@ public partial class PdfReader private uint _currentPage; private string? _url; private string? _currentScale; + private bool _enableTwoPagesOnView; private readonly HashSet AllowedScaleValues = ["page-actual", "page-width", "page-height", "page-fit", "auto"]; @@ -96,6 +103,8 @@ protected override void OnParametersSet() Options.CurrentPage = 1; } _docTitle = Path.GetFileName(Options.Url); + + MoreButtonIcon ??= "fa-solid fa-ellipsis-vertical"; } /// @@ -113,6 +122,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) _currentPage = Options.CurrentPage; _url = Options.Url; _currentScale = Options.CurrentScale; + _enableTwoPagesOnView = Options.EnableTwoPagesOnView; } if (_url != Options.Url) @@ -136,6 +146,11 @@ protected override async Task OnAfterRenderAsync(bool firstRender) _currentScale = Options.CurrentScale; await InvokeVoidAsync("scale", Id, _currentScale); } + if (_enableTwoPagesOnView != Options.EnableTwoPagesOnView) + { + _currentScale = Options.CurrentScale; + await InvokeVoidAsync("setPages", Id, _enableTwoPagesOnView); + } } /// @@ -147,7 +162,8 @@ protected override async Task OnAfterRenderAsync(bool firstRender) Options.Url, Options.IsFitToPage, TriggerPagesInit = Options.OnInitAsync != null, - TriggerPageChanged = Options.OnPageChangedAsync != null + TriggerPageChanged = Options.OnPageChangedAsync != null, + TriggerTowPagesOnViewChanged = Options.OnTwoPagesOneViewAsync != null }); /// diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.css b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.css index fb26b844..8af80838 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.css +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.css @@ -18,6 +18,14 @@ visibility: hidden; } + .bb-view-toolbar ::deep .btn { + --bs-btn-color: #fff; + } + + .bb-view-toolbar ::deep .dropdown-toggle::after { + content: none; + } + .bb-view-title { display: flex; align-items: center; diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js index b6e431fc..43db018a 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js @@ -102,6 +102,13 @@ export function scale(id, scale) { } } +export function setPages(id, enableTowPagesOnView) { + const { el, pdfViewer } = Data.get(id); + if (pdfViewer) { + pdfViewer.spreadMode = 1; + } +} + const addEventListener = (el, pdfViewer, eventBus, invoke, options) => { eventBus.on("pagesinit", async () => { if (options.isFitToPage) { @@ -149,6 +156,18 @@ const addEventListener = (el, pdfViewer, eventBus, invoke, options) => { EventHandler.on(minus, "click", e => updateScale(pdfViewer, e.target, -1)); EventHandler.on(plus, "click", e => updateScale(pdfViewer, e.target, 1)); + + const towPagesOneView = el.querySelector(".dropdown-item-pages"); + if (towPagesOneView) { + EventHandler.on(towPagesOneView, "click", e => { + if (pdfViewer.spreadMode === 0) { + pdfViewer.spreadMode = 1; + } + else { + pdfViewer.spreadMode = 0; + } + }); + } } const updateScale = (pdfViewer, button, rate) => { @@ -159,7 +178,7 @@ const updateScale = (pdfViewer, button, rate) => { const scale = pdfViewer.currentScale; const current = Math.round(parseFloat(scale * 100), 0); const step = [25, 33, 50, 67, 75, 80, 90, 100, 110, 125, 150, 175, 200, 250, 300, 400, 500]; - const findValues = step.filter(s => rate > 0 ? current < s : current > s); + const findValues = step.filter(s => rate > 0 ? current < s : current > s); let v = 100; if (rate > 0) { v = findValues.shift(); @@ -177,7 +196,16 @@ export function dispose(id) { if (el) { const minus = el.querySelector(".bb-page-minus"); const plus = el.querySelector(".bb-page-plus"); - EventHandler.off(minus, "click"); - EventHandler.off(plus, "click"); + if (minus) { + EventHandler.off(minus, "click"); + } + if (plus) { + EventHandler.off(plus, "click"); + } + + const towPagesOneView = el.querySelector(".dropdown-item-pages"); + if (towPagesOneView) { + EventHandler.off(towPagesOneView, "click"); + } } } diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReaderOptions.cs b/src/components/BootstrapBlazor.PdfReader/PdfReaderOptions.cs index 8dfb1ec3..afe07267 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReaderOptions.cs +++ b/src/components/BootstrapBlazor.PdfReader/PdfReaderOptions.cs @@ -39,6 +39,16 @@ public class PdfReaderOptions /// public bool IsFitToPage { get; set; } + /// + /// 获得/设置 是否显示双页单视图按钮 默认 true 显示 + /// + public bool ShowTowPagesOnViewButton { get; set; } = true; + + /// + /// 获得/设置 是否启用双页单视图模式 默认 false + /// + public bool EnableTwoPagesOnView { get; set; } + /// /// 页面初始化回调方法 /// @@ -48,4 +58,9 @@ public class PdfReaderOptions /// 页面初始化回调方法 /// public Func? OnPageChangedAsync { get; set; } + + /// + /// 设置双页单视图模式回调方法 + /// + public Func? OnTwoPagesOneViewAsync { get; set; } } From 6367dd523ff302ba7ed9a39ecc6bf336b12c693c Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 26 Nov 2025 09:00:40 +0800 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E8=81=94?= =?UTF-8?q?=E5=8A=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BootstrapBlazor.PdfReader/PdfReader.razor | 8 +++++--- .../PdfReader.razor.cs | 18 ++++++++++++++---- .../PdfReader.razor.js | 7 ++++++- .../PdfReaderOptions.cs | 2 +- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor index 3b25e584..5062b552 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor @@ -28,12 +28,14 @@
+ IsPopover="false" MenuAlignment="Alignment.Right" Icon="@MoreButtonIcon"> - @if (Options.ShowTowPagesOnViewButton) + @if (Options.ShowTwoPagesOnViewButton) { - + + } + diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs index f423406f..db874128 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs @@ -44,7 +44,8 @@ public partial class PdfReader private uint _currentPage; private string? _url; private string? _currentScale; - private bool _enableTwoPagesOnView; + private bool _enableTwoPagesOneView; + private string? _twoPagesOneViewIcon; private readonly HashSet AllowedScaleValues = ["page-actual", "page-width", "page-height", "page-fit", "auto"]; @@ -89,6 +90,14 @@ private void SetCurrentScale(string value) } } + private void OnToggleTwoPagesOneView() + { + _enableTwoPagesOneView = !_enableTwoPagesOneView; + Options.EnableTwoPagesOnView = _enableTwoPagesOneView; + + _twoPagesOneViewIcon = _enableTwoPagesOneView ? "fa-solid fa-fw fa-check" : "fa-solid fa-fw"; + } + /// /// /// @@ -105,6 +114,7 @@ protected override void OnParametersSet() _docTitle = Path.GetFileName(Options.Url); MoreButtonIcon ??= "fa-solid fa-ellipsis-vertical"; + _twoPagesOneViewIcon ??= "fa-solid fa-fw"; } /// @@ -122,7 +132,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) _currentPage = Options.CurrentPage; _url = Options.Url; _currentScale = Options.CurrentScale; - _enableTwoPagesOnView = Options.EnableTwoPagesOnView; + _enableTwoPagesOneView = Options.EnableTwoPagesOnView; } if (_url != Options.Url) @@ -146,10 +156,10 @@ protected override async Task OnAfterRenderAsync(bool firstRender) _currentScale = Options.CurrentScale; await InvokeVoidAsync("scale", Id, _currentScale); } - if (_enableTwoPagesOnView != Options.EnableTwoPagesOnView) + if (_enableTwoPagesOneView != Options.EnableTwoPagesOnView) { _currentScale = Options.CurrentScale; - await InvokeVoidAsync("setPages", Id, _enableTwoPagesOnView); + await InvokeVoidAsync("setPages", Id, _enableTwoPagesOneView); } } diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js index 43db018a..1f3be938 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.js @@ -105,7 +105,12 @@ export function scale(id, scale) { export function setPages(id, enableTowPagesOnView) { const { el, pdfViewer } = Data.get(id); if (pdfViewer) { - pdfViewer.spreadMode = 1; + if (enableTowPagesOnView) { + pdfViewer.spreadMode = 1; + } + else { + pdfViewer.spreadMode = 0; + } } } diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReaderOptions.cs b/src/components/BootstrapBlazor.PdfReader/PdfReaderOptions.cs index afe07267..757dda09 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReaderOptions.cs +++ b/src/components/BootstrapBlazor.PdfReader/PdfReaderOptions.cs @@ -42,7 +42,7 @@ public class PdfReaderOptions /// /// 获得/设置 是否显示双页单视图按钮 默认 true 显示 /// - public bool ShowTowPagesOnViewButton { get; set; } = true; + public bool ShowTwoPagesOnViewButton { get; set; } = true; /// /// 获得/设置 是否启用双页单视图模式 默认 false From b0bc84f6b25f948fddf36c4097a246ab85e77922 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 26 Nov 2025 09:10:10 +0800 Subject: [PATCH 7/7] =?UTF-8?q?refactor:=20=E7=B2=BE=E7=AE=80=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/BootstrapBlazor.PdfReader/PdfReader.razor | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor index 5062b552..080df140 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor @@ -21,8 +21,6 @@
-
-