46 lines
1.6 KiB
C#
46 lines
1.6 KiB
C#
|
|
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;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|