diff --git a/samples/seed/docfx.json b/samples/seed/docfx.json index 6dcf2b76192..3dfed8aca10 100644 --- a/samples/seed/docfx.json +++ b/samples/seed/docfx.json @@ -70,7 +70,7 @@ { "files": [ "**" ], "src": "obj/md", "dest": "md" }, { "files": [ "**" ], "src": "obj/apipage", "dest": "apipage" }, { "files": [ "articles/**/*.{md,yml}", "*.md", "toc.yml", "restapi/**" ] }, - { "files": [ "pdf/**" ] } + { "files": [ "pdf/*.{md,yml}" ] } ], "resource": [ { diff --git a/src/Docfx.App/PdfBuilder.cs b/src/Docfx.App/PdfBuilder.cs index 29013abd899..2e4123f6a3b 100644 --- a/src/Docfx.App/PdfBuilder.cs +++ b/src/Docfx.App/PdfBuilder.cs @@ -106,7 +106,7 @@ await Parallel.ForEachAsync(pdfTocs, async (item, _) => var outputPath = Path.Combine(outputFolder, outputName); await CreatePdf( - PrintPdf, PrintHeaderFooter, task, new(baseUrl, url), toc, outputPath, + PrintPdf, PrintHeaderFooter, task, new(baseUrl, url), toc, outputFolder, outputPath, pageNumbers => pdfPageNumbers[url] = pageNumbers); task.Value = task.MaxValue; @@ -256,7 +256,7 @@ static string ExpandTemplate(string? pdfTemplate, int pageNumber, int totalPages static async Task CreatePdf( Func> printPdf, Func> printHeaderFooter, ProgressTask task, - Uri outlineUrl, Outline outline, string outputPath, Action> updatePageNumbers) + Uri outlineUrl, Outline outline, string outputFolder, string outputPath, Action> updatePageNumbers) { var tempDirectory = Path.Combine(Path.GetTempPath(), ".docfx", "pdf", "pages"); Directory.CreateDirectory(tempDirectory); @@ -357,7 +357,7 @@ async Task MergePdf() if (!pageBytes.TryGetValue(node, out var bytes)) continue; - var isCoverPage = url.AbsolutePath.TrimStart('/').Equals(outline.pdfCoverPage, GetStringComparison()); + var isCoverPage = IsCoverPage(url, outputFolder, outline.pdfCoverPage); var isTocPage = IsTocPage(url); if (isTocPage) @@ -440,6 +440,19 @@ PdfAction HandleUriAction(UriAction url) static Uri CleanUrl(Uri url) => new UriBuilder(url) { Query = null, Fragment = null }.Uri; + static bool IsCoverPage(Uri pageUri, string baseFolder, string? pdfCoverPage) + { + Debug.Assert(Path.IsPathFullyQualified(baseFolder)); + + if (string.IsNullOrEmpty(pdfCoverPage)) + return false; + + string pagePath = pageUri.AbsolutePath.TrimStart('/'); + string covePagePath = PathUtility.MakeRelativePath(baseFolder, Path.GetFullPath(Path.Combine(baseFolder, pdfCoverPage))); + + return pagePath.Equals(covePagePath, GetStringComparison()); + } + static bool IsTocPage(Uri url) => url.AbsolutePath.StartsWith("/_pdftoc/"); Bookmarks CreateBookmarks(Outline[]? items)