From 04b9fa82209368ba689ac18acd3e8abbec414b28 Mon Sep 17 00:00:00 2001 From: zpc Date: Mon, 30 Mar 2026 18:00:30 +0800 Subject: [PATCH] feat(pdf): Add page numbering to generated PDF documents - Add page counter display at bottom center of each PDF page - Track total page count and current page index during PDF generation - Use Arial font (10pt) with gray color (#999999) for page numbers - Format page numbers as "current / total" (e.g., "1 / 5") - Position page numbers 20pt from bottom of page - Refactor loop from foreach to indexed for loop to access page index - Improve PDF document readability with page navigation information --- .../Services/PdfGenerationService.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/server/MiAssessment/src/MiAssessment.Core/Services/PdfGenerationService.cs b/server/MiAssessment/src/MiAssessment.Core/Services/PdfGenerationService.cs index 995d822..7d69b2f 100644 --- a/server/MiAssessment/src/MiAssessment.Core/Services/PdfGenerationService.cs +++ b/server/MiAssessment/src/MiAssessment.Core/Services/PdfGenerationService.cs @@ -409,17 +409,27 @@ public class PdfGenerationService : IPdfGenerationService private static void BuildAndSavePdf(List images, string filePath) { using var document = new PdfDocument(); + var totalPages = images.Count; + var font = new XFont("Arial", 10, XFontStyleEx.Regular); + var brush = new XSolidBrush(XColor.FromArgb(153, 153, 153)); // #999999 - foreach (var imageBytes in images) + for (var i = 0; i < totalPages; i++) { + var imageBytes = images[i]; var page = document.AddPage(); page.Width = XUnit.FromPoint(PageWidthPt); page.Height = XUnit.FromPoint(PageHeightPt); - using var stream = new MemoryStream(imageBytes); using var xImage = XImage.FromStream(() => new MemoryStream(imageBytes)); using var gfx = XGraphics.FromPdfPage(page); gfx.DrawImage(xImage, 0, 0, page.Width, page.Height); + + // 绘制页码(底部居中) + var pageNumber = $"{i + 1} / {totalPages}"; + var size = gfx.MeasureString(pageNumber, font); + var x = (page.Width - size.Width) / 2; + var y = page.Height - 20; // 距底部 20pt + gfx.DrawString(pageNumber, font, brush, x, y); } document.Save(filePath);