feat(pdf): Add page numbering to generated PDF documents
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
- 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
This commit is contained in:
parent
8ae6dcfa88
commit
04b9fa8220
|
|
@ -409,17 +409,27 @@ public class PdfGenerationService : IPdfGenerationService
|
||||||
private static void BuildAndSavePdf(List<byte[]> images, string filePath)
|
private static void BuildAndSavePdf(List<byte[]> images, string filePath)
|
||||||
{
|
{
|
||||||
using var document = new PdfDocument();
|
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();
|
var page = document.AddPage();
|
||||||
page.Width = XUnit.FromPoint(PageWidthPt);
|
page.Width = XUnit.FromPoint(PageWidthPt);
|
||||||
page.Height = XUnit.FromPoint(PageHeightPt);
|
page.Height = XUnit.FromPoint(PageHeightPt);
|
||||||
|
|
||||||
using var stream = new MemoryStream(imageBytes);
|
|
||||||
using var xImage = XImage.FromStream(() => new MemoryStream(imageBytes));
|
using var xImage = XImage.FromStream(() => new MemoryStream(imageBytes));
|
||||||
using var gfx = XGraphics.FromPdfPage(page);
|
using var gfx = XGraphics.FromPdfPage(page);
|
||||||
gfx.DrawImage(xImage, 0, 0, page.Width, page.Height);
|
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);
|
document.Save(filePath);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user