From 5347424e42f1d5a92b5c77b480bdd0d5e16ad7ba Mon Sep 17 00:00:00 2001 From: SmartRootsSrl Date: Mon, 8 Jun 2026 17:47:21 +0200 Subject: [PATCH] feat: add FundChartSectionRenderer (chart PNG wrapped as PDF landscape page) --- .../FundChartSectionRenderer.cs | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 CertReports.Syncfusion/Services/Implementations/FundChartSectionRenderer.cs diff --git a/CertReports.Syncfusion/Services/Implementations/FundChartSectionRenderer.cs b/CertReports.Syncfusion/Services/Implementations/FundChartSectionRenderer.cs new file mode 100644 index 0000000..fb0baea --- /dev/null +++ b/CertReports.Syncfusion/Services/Implementations/FundChartSectionRenderer.cs @@ -0,0 +1,52 @@ +using CertReports.Syncfusion.Services.Interfaces; +using Syncfusion.Drawing; +using Syncfusion.Pdf; +using Syncfusion.Pdf.Graphics; + +namespace CertReports.Syncfusion.Services.Implementations; + +public class FundChartSectionRenderer +{ + private readonly IFundDataService _dataService; + private readonly ILogger _logger; + + public FundChartSectionRenderer(IFundDataService dataService, + ILogger logger) + { + _dataService = dataService; + _logger = logger; + } + + public async Task RenderAsync(string isin, string instrumentName) + { + try + { + var points = await _dataService.GetChartPricesAsync(isin); + var pngBytes = FundSkiaChartRenderer.Render(points, instrumentName, + width: 1100, height: 650); + return WrapInPdf(pngBytes); + } + catch (Exception ex) + { + _logger.LogError(ex, "Errore FundChartSectionRenderer per ISIN {Isin}", isin); + return null; + } + } + + private static PdfDocument WrapInPdf(byte[] pngBytes) + { + var doc = new PdfDocument(); + doc.PageSettings.Size = PdfPageSize.A4; + doc.PageSettings.Orientation = PdfPageOrientation.Landscape; + doc.PageSettings.Margins.All = 20; + var page = doc.Pages.Add(); + var g = page.Graphics; + float w = page.GetClientSize().Width; + float h = page.GetClientSize().Height; + + using var imgStream = new MemoryStream(pngBytes); + var pdfImage = PdfImage.FromStream(imgStream); + g.DrawImage(pdfImage, new RectangleF(0, 0, w, h)); + return doc; + } +}