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