From 20275794d472493dd098939fa2bcaa5b1dd6b03c Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Sat, 3 May 2025 15:48:58 +0800 Subject: [PATCH] Set PDF file title --- modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs | 1 + .../Docs/Projects/Pdf/DocsProjectPdfGeneratorOptions.cs | 6 ++++++ .../Volo/Docs/Projects/Pdf/IHtmlToPdfRenderer.cs | 2 +- .../Volo/Docs/Projects/Pdf/IText/ITextHtmlToPdfRenderer.cs | 3 ++- .../Volo/Docs/Projects/Pdf/ProjectPdfGenerator.cs | 3 ++- 5 files changed, 12 insertions(+), 3 deletions(-) diff --git a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs index f48879b43a..03875dd6dd 100644 --- a/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs +++ b/modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs @@ -179,6 +179,7 @@ namespace VoloDocs.Web { options.BaseUrl = configuration["App:selfUrl"]; options.IndexPagePath = "Index.md"; + options.CalculatePdfFileTitle = project => project.ShortName == "abp" ? "ABP Documentation" : null; }); Configure(options => diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/DocsProjectPdfGeneratorOptions.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/DocsProjectPdfGeneratorOptions.cs index 708dd7f94d..39a7716e68 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/DocsProjectPdfGeneratorOptions.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/DocsProjectPdfGeneratorOptions.cs @@ -1,4 +1,5 @@ using System; +using Scriban.Syntax; namespace Volo.Docs.Projects.Pdf; @@ -40,6 +41,11 @@ public class DocsProjectPdfGeneratorOptions /// public Func CalculatePdfFileName { get; set; } + /// + /// The function to calculate the PDF file title. + /// + public Func CalculatePdfFileTitle { get; set; } + public DocsProjectPdfGeneratorOptions() { HtmlLayout = $@" diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IHtmlToPdfRenderer.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IHtmlToPdfRenderer.cs index f134b0cdb2..c17908af51 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IHtmlToPdfRenderer.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IHtmlToPdfRenderer.cs @@ -6,5 +6,5 @@ namespace Volo.Docs.Projects.Pdf; public interface IHtmlToPdfRenderer { - Task RenderAsync(string html, List documents); + Task RenderAsync(string title, string html, List documents); } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IText/ITextHtmlToPdfRenderer.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IText/ITextHtmlToPdfRenderer.cs index 9ecc866105..e28113d762 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IText/ITextHtmlToPdfRenderer.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IText/ITextHtmlToPdfRenderer.cs @@ -20,11 +20,12 @@ public class ITextHtmlToPdfRenderer : IHtmlToPdfRenderer ,ITransientDependency Options = options; } - public virtual Task RenderAsync(string html, List documents) + public virtual Task RenderAsync(string title, string html, List documents) { var pdfStream = new MemoryStream(); var pdfWrite = new PdfWriter(pdfStream); var pdfDocument = new iText.Kernel.Pdf.PdfDocument(pdfWrite); + pdfDocument.GetDocumentInfo().SetTitle(title); var textDocument = new ITextDocument(pdfDocument); pdfWrite.SetCloseStream(false); diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/ProjectPdfGenerator.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/ProjectPdfGenerator.cs index 8999c8ae98..218d790898 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/ProjectPdfGenerator.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/ProjectPdfGenerator.cs @@ -69,7 +69,8 @@ public class ProjectPdfGenerator : IProjectPdfGenerator, ITransientDependency await SetAllPdfDocumentsAsync(navigation.Items, project, version, languageCode); var html = await BuildHtmlAsync(); - var pdfStream = await HtmlToPdfRenderer.RenderAsync(html, AllPdfDocuments); + var title = Options.Value.CalculatePdfFileTitle?.Invoke(project) ?? project.Name; + var pdfStream = await HtmlToPdfRenderer.RenderAsync(title, html, AllPdfDocuments); await ProjectPdfFileStore.SetAsync(project, version, languageCode, pdfStream);