11using System ;
2+ using System . Collections . Generic ;
3+ using System . Linq ;
24using System . Text . RegularExpressions ;
35using System . Web ;
46using Markdig ;
57using Microsoft . Extensions . Options ;
68using Volo . Abp . DependencyInjection ;
9+ using Volo . Docs . Documents ;
710using Volo . Docs . HtmlConverting ;
8- using Volo . Docs . Projects . Pdf . Markdig ;
911using Volo . Docs . Utils ;
1012
11- namespace Volo . Docs . Projects . Pdf . Markdown ;
13+ namespace Volo . Docs . Projects . Pdf . Markdig ;
1214
1315public class MarkdigPdfDocumentToHtmlConverter : IDocumentToHtmlConverter < PdfDocumentToHtmlConverterContext > , ITransientDependency
1416{
@@ -22,7 +24,11 @@ public MarkdigPdfDocumentToHtmlConverter(IOptions<DocsProjectPdfGeneratorOptions
2224
2325 public virtual string Convert ( PdfDocumentToHtmlConverterContext converterContext )
2426 {
25- var htmlContent = global ::Markdig . Markdown . ToHtml ( NormalizeContent ( converterContext . Content ) , GetPipeline ( converterContext . PdfDocument ) ) ;
27+ var htmlContent = Markdown . ToHtml ( NormalizeContent (
28+ converterContext . Content ,
29+ converterContext . PdfDocument ,
30+ converterContext . DocumentParams ) ,
31+ GetPipeline ( converterContext . PdfDocument ) ) ;
2632 return NormalizeHtmlContent ( htmlContent , converterContext . PdfDocument ) ;
2733 }
2834
@@ -34,9 +40,29 @@ protected virtual MarkdownPipeline GetPipeline(PdfDocument pdfDocument)
3440 . Build ( ) ;
3541 }
3642
37- protected virtual string NormalizeContent ( string content )
43+ protected virtual string NormalizeContent ( string content , PdfDocument pdfDocument , DocumentParams documentParams )
3844 {
39- return Regex . Replace ( content , @"`{3,4}json\s*//\[doc-nav\][\s\S]*?`{3,4}" , string . Empty , RegexOptions . IgnoreCase ) ;
45+ content = Regex . Replace ( content , @"`{3,4}json\s*//\[doc-nav\][\s\S]*?`{3,4}" , string . Empty , RegexOptions . IgnoreCase ) ;
46+
47+ if ( pdfDocument . RenderParameters . IsNullOrEmpty ( ) )
48+ {
49+ return content ;
50+ }
51+
52+ var titleLine = content . Split ( Environment . NewLine ) . FirstOrDefault ( x => x . TrimStart ( ) . StartsWith ( "#" ) ) ;
53+ if ( titleLine == null )
54+ {
55+ return content ;
56+ }
57+
58+ var paramValues = pdfDocument . RenderParameters . Select ( x =>
59+ {
60+ var documentParam = documentParams . Parameters . FirstOrDefault ( p => p . Name == x . Key ) ;
61+ return $ "{ documentParam ? . Values [ x . Value ] ?? x . Value } ";
62+ } ) ;
63+
64+ var newTitle = $ "{ titleLine . Trim ( ) } ({ string . Join ( ", " , paramValues ) } )";
65+ return content . Replace ( titleLine , newTitle ) ;
4066 }
4167
4268 protected virtual string NormalizeHtmlContent ( string htmlContent , PdfDocument pdfDocument )
0 commit comments