XtudioPdf

Empezar

De cero a tu primer PDF en 10 minutos

Diseñas la plantilla de forma visual dentro de Visual Studio o VS Code. Al compilar, queda embebida en tu DLL. En producción tu código genera el PDF en el servidor, sin navegador y sin archivos que copiar.

1. Elige tu paquete

Instala solo uno. XtudioPdf.AspNetCore ya incluye el motor.

Tu proyectoPaquete
Web API, Minimal API, MVC o Razor Pages (ASP.NET Core)XtudioPdf.AspNetCore
Worker Service, consola, escritorio (WPF, WinForms, MAUI), Azure Functions o una librería propiaXtudioPdf.Core
$ dotnet add package XtudioPdf.AspNetCore

Requiere .NET 8 o .NET 10. Funciona en Windows, Linux, macOS y Docker. No es compatible con .NET Framework (4.x).

2. Instala la extensión (una vez por computadora)

Visual Studio 2022+

Extensiones → Administrar extensiones → busca “XtudioPdf” → Instalar, y reinicia Visual Studio.

VS Code

Extensiones (Ctrl+Shift+X) → busca “XtudioPdf” → Instalar.

$ code --install-extension xtudiopdf.xtudiopdf

Eso es todo. La primera vez que abres un .pdfx, la extensión instala sola el diseñador (la herramienta xtudiopdf) y lo mantiene actualizado. Sin extensión, instálalo a mano: dotnet tool install -g XtudioPdf.Tool

3. Diseña

Dentro de tu editor

Haz doble clic en un archivo .pdfx de tu proyecto y el diseñador se abre como una pestaña más, con la vista previa del PDF en vivo. Guardas con Ctrl+S. No necesitas levantar tu app.

Desde la terminal

Sin extensiones, abre el diseñador sobre una plantilla con:

$ xtudiopdf open Invoice.pdfx

Dentro de tu app (opcional)

Con AddXtudioPdf() el diseñador también está en /xtudiopdf mientras tu app corre en Development, para diseñar con datos reales. Nunca se abre en producción.

Crea un reporte nuevo con su DTO y su plantilla: xtudiopdf new Invoice o clic derecho en una carpeta del proyecto: Agregar → XtudioPdf document… en Visual Studio, Nuevo documento XtudioPdf… en VS Code.

4. Genera el PDF en tu código

Cada .pdfx del proyecto se embebe al compilar y se revisa contra su DTO: si un campo no existe, el compilador te avisa.

// Program.cs
builder.Services.AddPdfReports();

// Invoice.cs: tu DTO y su reporte
[PdfDataSource]
public sealed record InvoiceDto(string Number, string Customer, decimal Total, List<LineDto> Lines);
public sealed class InvoiceReport(PdfTemplates templates) : PdfReport<InvoiceDto>(templates);

// Tu endpoint devuelve el PDF
app.MapGet("/invoices/{id}.pdf", async (int id, InvoiceReport report, AppDb db) =>
    Results.File(report.Render(await db.GetInvoiceAsync(id)), "application/pdf", $"invoice-{id}.pdf"));

Sin ASP.NET Core (XtudioPdf.Core):

var templates = new PdfTemplates().AddAssembly(typeof(Program).Assembly);
byte[] pdf = templates.Render("Invoice", invoice);

Qué haces con los bytes depende de ti: devolverlos desde tu API, guardarlos, adjuntarlos a un correo o enviarlos a la autoridad tributaria junto con el XML.

5. Activa Pro (opcional)

Community funciona sin clave. Si tienes una clave Pro, ponla en appsettings.json o en la variable de entorno XTUDIOPDF_LICENSE_KEY. Se valida sin conexión.

"XtudioPdf": { "LicenseKey": "XTPD.…" }