feat: add FundChartSectionRenderer (chart PNG wrapped as PDF landscape page)
This commit is contained in:
@@ -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<FundChartSectionRenderer> _logger;
|
||||
|
||||
public FundChartSectionRenderer(IFundDataService dataService,
|
||||
ILogger<FundChartSectionRenderer> logger)
|
||||
{
|
||||
_dataService = dataService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public async Task<PdfDocument?> 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user