1- // Copyright (c) Argo Zhang (argo@163.com ). All rights reserved.
1+ // Copyright (c) BootstrapBlazor & Argo Zhang (argo@live.ca ). All rights reserved.
22// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33// Website: https://www.blazor.zone or https://argozhang.github.io/
44
@@ -37,6 +37,12 @@ public partial class Mermaid
3737 [ Parameter ]
3838 public string ? Title { set ; get ; }
3939
40+ [ Inject , NotNull ]
41+ private IHtml2Pdf ? Html2PdfService { get ; set ; }
42+
43+ [ Inject , NotNull ]
44+ private DownloadService ? DownloadService { get ; set ; }
45+
4046 private string ? ClassString => CssBuilder . Default ( "bb-mermaid mermaid" )
4147 . AddClassFromAttributes ( AdditionalAttributes )
4248 . Build ( ) ;
@@ -48,7 +54,8 @@ public partial class Mermaid
4854 protected override async Task OnParametersSetAsync ( )
4955 {
5056 await base . OnParametersSetAsync ( ) ;
51- await MermaidChanged ( ) ;
57+
58+ await Render ( ) ;
5259 }
5360
5461 /// <summary>
@@ -58,21 +65,53 @@ protected override async Task OnParametersSetAsync()
5865 protected override Task InvokeInitAsync ( ) => InvokeVoidAsync ( "init" , Id , BuildDiagramText ( ) ) ;
5966
6067 /// <summary>
61- /// 内容改变时重新渲染mermaid
68+ /// 内容改变时重新渲染 mermaid
6269 /// </summary>
63- /// <returns></returns>
70+ [ Obsolete ( "已弃用,请使用 Render 代替; Deprecated; please use Render instead." ) ]
71+ [ ExcludeFromCodeCoverage ]
6472 public Task MermaidChanged ( ) => InvokeVoidAsync ( "init" , Id , BuildDiagramText ( ) ) ;
6573
74+ /// <summary>
75+ /// 内容改变时重新渲染 mermaid
76+ /// </summary>
77+ public Task Render ( ) => InvokeVoidAsync ( "render" , Id , BuildDiagramText ( ) ) ;
78+
6679 /// <summary>
6780 /// 导出图为 base64 字符串
6881 /// </summary>
6982 /// <returns>base64 string of the diagram</returns>
7083 public Task < string ? > ExportBase64MermaidAsync ( ) => InvokeAsync < string > ( "getContent" , Id ) ;
7184
7285 /// <summary>
73- /// 构造 Mermaid 代码
86+ /// 导出图为 Pdf 文档流
7487 /// </summary>
75- /// <returns></returns>
88+ public async Task < Stream ? > ExportPdfAsync ( CancellationToken token = default )
89+ {
90+ Stream ? stream = null ;
91+ var html = await InvokeAsync < string ? > ( "getSvgHtml" , token , Id ) ;
92+ if ( html != null )
93+ {
94+ stream = await Html2PdfService . PdfStreamFromHtmlAsync ( html ) ;
95+ }
96+
97+ return stream ;
98+ }
99+
100+ /// <summary>
101+ /// 下载 Pdf 文档
102+ /// </summary>
103+ /// <returns>base64 string of the diagram</returns>
104+ public async Task DownloadPdfAsync ( string fileName , CancellationToken token = default )
105+ {
106+ ArgumentNullException . ThrowIfNull ( fileName ) ;
107+
108+ var stream = await ExportPdfAsync ( token ) ;
109+ if ( stream != null )
110+ {
111+ await DownloadService . DownloadFromStreamAsync ( fileName , stream ) ;
112+ }
113+ }
114+
76115 private string BuildDiagramText ( )
77116 {
78117 StringBuilder sb = new ( ) ;
0 commit comments