@@ -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