diff --git a/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj b/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj index f2c50ba6..46472075 100644 --- a/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj +++ b/src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj @@ -1,7 +1,7 @@  - 10.0.11 + 10.0.12 diff --git a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs index bef53ed5..a177e882 100644 --- a/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs +++ b/src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs @@ -127,6 +127,13 @@ public partial class PdfReader [Parameter] public Func? OnPrintingAsync { get; set; } + /// + /// 通过流加载 PDF 文档回调方法 默认 null + /// + /// 优先使用 未提供 时会尝试调用此回调获得流进行渲染 + [Parameter] + public Func>? OnGetStreamAsync { get; set; } + [Inject, NotNull] private IStringLocalizer? Localizer { get; set; } @@ -228,19 +235,24 @@ protected override async Task OnAfterRenderAsync(bool firstRender) /// /// /// - protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, new + protected override async Task InvokeInitAsync() { - Url, - FitMode, - EnableThumbnails, - CurrentPage, - TriggerPagesInit = OnPagesInitAsync != null, - TriggerPagesLoaded = OnPagesLoadedAsync != null, - TriggerPageChanged = OnPageChangedAsync != null, - TriggerTowPagesOnViewChanged = OnTwoPagesOneViewAsync != null, - TriggerScaleChanged = OnScaleChangedAsync != null, - TriggerRotationChanged = OnRotationChanged != null, - }); + var _data = await GetPdfStreamDataAsync(); + await InvokeVoidAsync("init", Id, Interop, new + { + Url, + Data = _data, + FitMode, + EnableThumbnails, + CurrentPage, + TriggerPagesInit = OnPagesInitAsync != null, + TriggerPagesLoaded = OnPagesLoadedAsync != null, + TriggerPageChanged = OnPageChangedAsync != null, + TriggerTowPagesOnViewChanged = OnTwoPagesOneViewAsync != null, + TriggerScaleChanged = OnScaleChangedAsync != null, + TriggerRotationChanged = OnRotationChanged != null, + }); + } /// /// 跳转到指定页码方法 @@ -266,6 +278,19 @@ protected override async Task OnAfterRenderAsync(bool firstRender) /// public Task RotateRight() => InvokeVoidAsync("rotate", Id, 90); + private async Task GetPdfStreamDataAsync() + { + byte[]? pdfBytes = null; + if (OnGetStreamAsync != null) + { + using var memoryStream = new MemoryStream(); + var stream = await OnGetStreamAsync(); + await stream.CopyToAsync(memoryStream); + pdfBytes = memoryStream.ToArray(); + } + return pdfBytes; + } + /// /// 页面开始初始化时回调方法 ///