Skip to content

Generar PDFs

UruFactura SDK incluye un generador de PDFs que produce representaciones impresas de CFEs según la normativa DGI, incluyendo código QR y sellos de seguridad.


FormatoMétodoUso recomendado
A4GenerarPdfA4(cfe)Email, archivo digital, impresora de oficina
Térmico 80mmGenerarPdfTermico(cfe)Impresora de punto de venta (ticket)

var eticket = client.CrearETicket();
// ... configurar el e-ticket ...
// Enviar primero (o solo generar y firmar si no querés enviar)
await client.EnviarCfeAsync(eticket);
// Generar PDF A4
byte[] pdfA4 = client.GenerarPdfA4(eticket);
// Guardar en disco
await File.WriteAllBytesAsync($"eticket_{eticket.Numero:D8}.pdf", pdfA4);

byte[] pdfTermico = client.GenerarPdfTermico(eticket);
await File.WriteAllBytesAsync($"eticket_{eticket.Numero:D8}_termico.pdf", pdfTermico);

var (pdfA4, pdfTermico) = (
client.GenerarPdfA4(eticket),
client.GenerarPdfTermico(eticket)
);
await Task.WhenAll(
File.WriteAllBytesAsync($"facturas/{eticket.Numero:D8}.pdf", pdfA4),
File.WriteAllBytesAsync($"tickets/{eticket.Numero:D8}_80mm.pdf", pdfTermico)
);

public class FacturaService
{
private readonly UruFacturaClient _client;
private readonly IEmailService _emailService;
public async Task EmitirYEnviarAsync(string emailCliente, LineaDetalle[] detalle)
{
var eticket = _client.CrearETicket();
eticket.Numero = await ObtenerProximoNumeroAsync();
foreach (var linea in detalle)
eticket.Detalle.Add(linea);
var respuesta = await _client.EnviarCfeAsync(eticket);
if (!respuesta.Exitoso)
throw new InvalidOperationException($"DGI rechazó el CFE: {respuesta.Mensaje}");
byte[] pdf = _client.GenerarPdfA4(eticket);
await _emailService.SendAsync(new EmailMessage
{
To = emailCliente,
Subject = $"Tu e-Ticket #{eticket.Numero}",
Body = "Adjuntamos tu comprobante fiscal electrónico.",
Attachment = new EmailAttachment
{
FileName = $"eticket_{eticket.Numero:D8}.pdf",
ContentType = "application/pdf",
Data = pdf,
},
});
}
}

var blobClient = containerClient.GetBlobClient($"facturas/{eticket.Numero:D8}.pdf");
using var stream = new MemoryStream(pdfA4);
await blobClient.UploadAsync(stream, overwrite: true);