Files

46 lines
1.6 KiB
C#
Raw Permalink Normal View History

using Microsoft.Extensions.Logging;
using QuestPDF.Fluent;
using QuestPDF.Infrastructure;
using System;
using System.Threading.Tasks;
namespace GestionIntegral.Api.Services.Pdf
{
// Una interfaz simple para mantener la inyección de dependencias
public interface IQuestPdfGenerator
{
Task<byte[]> GeneratePdfAsync(IDocument document);
}
public class QuestPdfGenerator : IQuestPdfGenerator
{
private readonly ILogger<QuestPdfGenerator> _logger;
public QuestPdfGenerator(ILogger<QuestPdfGenerator> logger)
{
_logger = logger;
// --- Configuración de la licencia ---
QuestPDF.Settings.License = LicenseType.Community;
_logger.LogInformation("QuestPDF inicializado con licencia Community.");
}
public async Task<byte[]> GeneratePdfAsync(IDocument document)
{
_logger.LogInformation("Generando PDF con QuestPDF para el documento de tipo {DocumentType}.", document.GetType().Name);
try
{
// GeneratePdf() es síncrono, pero lo envolvemos en un Task para mantener la interfaz asíncrona.
byte[] pdfBytes = await Task.Run(() => document.GeneratePdf());
_logger.LogInformation("PDF generado exitosamente con QuestPDF ({Length} bytes).", pdfBytes.Length);
return pdfBytes;
}
catch (Exception ex)
{
_logger.LogError(ex, "Error durante la generación del PDF con QuestPDF.");
throw;
}
}
}
}