Skip to content

Commit 30f142a

Browse files
authored
feat(PdfReader): add OnGetStreamAsync parameter (#813)
* feat(PdfReader): add OnGetStreamAsync parameter * chore: bump version 10.0.12
1 parent 130778d commit 30f142a

2 files changed

Lines changed: 38 additions & 13 deletions

File tree

src/components/BootstrapBlazor.PdfReader/BootstrapBlazor.PdfReader.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>10.0.11</Version>
4+
<Version>10.0.12</Version>
55
</PropertyGroup>
66

77
<PropertyGroup>

src/components/BootstrapBlazor.PdfReader/PdfReader.razor.cs

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,13 @@ public partial class PdfReader
127127
[Parameter]
128128
public Func<Task>? OnPrintingAsync { get; set; }
129129

130+
/// <summary>
131+
/// 通过流加载 PDF 文档回调方法 默认 null
132+
/// </summary>
133+
/// <remarks>优先使用 <see cref="Url"/> 未提供 <see cref="Url"/> 时会尝试调用此回调获得流进行渲染</remarks>
134+
[Parameter]
135+
public Func<Task<Stream>>? OnGetStreamAsync { get; set; }
136+
130137
[Inject, NotNull]
131138
private IStringLocalizer<PdfReader>? Localizer { get; set; }
132139

@@ -228,19 +235,24 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
228235
/// <inheritdoc/>
229236
/// </summary>
230237
/// <returns></returns>
231-
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, new
238+
protected override async Task InvokeInitAsync()
232239
{
233-
Url,
234-
FitMode,
235-
EnableThumbnails,
236-
CurrentPage,
237-
TriggerPagesInit = OnPagesInitAsync != null,
238-
TriggerPagesLoaded = OnPagesLoadedAsync != null,
239-
TriggerPageChanged = OnPageChangedAsync != null,
240-
TriggerTowPagesOnViewChanged = OnTwoPagesOneViewAsync != null,
241-
TriggerScaleChanged = OnScaleChangedAsync != null,
242-
TriggerRotationChanged = OnRotationChanged != null,
243-
});
240+
var _data = await GetPdfStreamDataAsync();
241+
await InvokeVoidAsync("init", Id, Interop, new
242+
{
243+
Url,
244+
Data = _data,
245+
FitMode,
246+
EnableThumbnails,
247+
CurrentPage,
248+
TriggerPagesInit = OnPagesInitAsync != null,
249+
TriggerPagesLoaded = OnPagesLoadedAsync != null,
250+
TriggerPageChanged = OnPageChangedAsync != null,
251+
TriggerTowPagesOnViewChanged = OnTwoPagesOneViewAsync != null,
252+
TriggerScaleChanged = OnScaleChangedAsync != null,
253+
TriggerRotationChanged = OnRotationChanged != null,
254+
});
255+
}
244256

245257
/// <summary>
246258
/// 跳转到指定页码方法
@@ -266,6 +278,19 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
266278
/// <returns></returns>
267279
public Task RotateRight() => InvokeVoidAsync("rotate", Id, 90);
268280

281+
private async Task<byte[]?> GetPdfStreamDataAsync()
282+
{
283+
byte[]? pdfBytes = null;
284+
if (OnGetStreamAsync != null)
285+
{
286+
using var memoryStream = new MemoryStream();
287+
var stream = await OnGetStreamAsync();
288+
await stream.CopyToAsync(memoryStream);
289+
pdfBytes = memoryStream.ToArray();
290+
}
291+
return pdfBytes;
292+
}
293+
269294
/// <summary>
270295
/// 页面开始初始化时回调方法
271296
/// </summary>

0 commit comments

Comments
 (0)