Browse Source

Set PDF file title

pull/22430/head
liangshiwei 1 year ago
parent
commit
20275794d4
  1. 1
      modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs
  2. 6
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/DocsProjectPdfGeneratorOptions.cs
  3. 2
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IHtmlToPdfRenderer.cs
  4. 3
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IText/ITextHtmlToPdfRenderer.cs
  5. 3
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/ProjectPdfGenerator.cs

1
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<AbpBlobStoringOptions>(options =>

6
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
/// </summary>
public Func<Project, string, string, string> CalculatePdfFileName { get; set; }
/// <summary>
/// The function to calculate the PDF file title.
/// </summary>
public Func<Project, string> CalculatePdfFileTitle { get; set; }
public DocsProjectPdfGeneratorOptions()
{
HtmlLayout = $@"

2
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<MemoryStream> RenderAsync(string html, List<PdfDocument> documents);
Task<MemoryStream> RenderAsync(string title, string html, List<PdfDocument> documents);
}

3
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<MemoryStream> RenderAsync(string html, List<PdfDocument> documents)
public virtual Task<MemoryStream> RenderAsync(string title, string html, List<PdfDocument> 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);

3
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);

Loading…
Cancel
Save