IRONSOFTWAREHOME
VIDEOS

Renderizar contenido WebGL en PDFs con IronPDF

Curtis Chau
Curtis Chau
Updated: 19 de julio de 2026

La migración de Playwright para .NET a IronPDF transforma su flujo de trabajo de generación de PDF de una herramienta de automatización del navegador centrada en las pruebas a una biblioteca de PDF creada específicamente. Esta guía proporciona una ruta de migración completa, paso a paso, que elimina los complejos patrones async, la gestión del ciclo de vida del navegador y las descargas del navegador de más de 400 MB, a la vez que proporciona un mejor rendimiento y funciones PDF profesionales.

Por qué migrar de Playwright a IronPDF

Entender Playwright para .NET

Playwright para .NET es el framework de pruebas integral de Microsoft, NO una biblioteca de generación de documentos. Fue desarrollado desde cero para realizar pruebas automatizadas en los navegadores Chromium, Firefox y WebKit. Playwright se destaca en probar escenarios: hacer clic en botones, completar formularios, interceptar solicitudes de red, tomar capturas de pantalla y validar la compatibilidad entre navegadores.

Comprensión crítica: Playwright es una herramienta de prueba que se está reutilizando para la generación de PDF. La creación de PDF es simplemente un efecto secundario de la función de impresión del navegador (Ctrl+P), no un objetivo principal del diseño. Esto crea desajustes arquitectónicos fundamentales:

  • Arquitectura de prueba primero: diseñada para pruebas de navegador interactivas, no para producción de documentos sin interfaz gráfica.
  • Carga de múltiples navegadores: descarga más de 400 MB de archivos binarios del navegador (Chromium, Firefox, WebKit) incluso cuando solo necesita la generación de PDF
  • API centrada en pruebas: patrones asincrónicos complejos diseñados para flujos de trabajo de automatización de pruebas, no para la generación de documentos
  • Sin funciones del documento: falta compatibilidad con PDF/A, firmas digitales, marcas de agua, fusión y controles de seguridad.

El problema del marco de pruebas

Playwright se diseñó para realizar pruebas de extremo a extremo, no para generar documentos. Esto plantea problemas fundamentales cuando se utiliza para PDF:

  1. se requieren descargas de navegador de más de 400 MB antes del primer uso. La configuración por defecto de Playwright implica la descarga de varios navegadores, lo que puede ser una consideración para entornos con estrictas limitaciones de recursos.

  2. Patrones asíncronos complejos con contextos de navegador y gestión de páginas. Los desarrolladores deben familiarizarse con los contextos del navegador y la gestión de páginas, así como con las prácticas de eliminación adecuadas.

  3. Arquitectura de pruebas no optimizada para la generación de documentos.

  4. Limitaciones de impresión a PDF equivalentes a la impresión con Ctrl+P del navegador. Los diseños pueden refluir, los fondos pueden omitirse por defecto y la salida está paginada para la impresión.

  5. No es compatible con PDF/A ni PDF/UA por motivos de accesibilidad. Playwright no puede producir documentos compatibles con PDF/A (archivo) o PDF/UA (accesibilidad). Para la Sección 508, las directivas de accesibilidad de la UE o los requisitos de archivado a largo plazo, necesitará una biblioteca PDF específica.

  6. Operaciones con muchos recursos que requieren instancias completas del navegador.

El problema de configuración del marco de pruebas

Playwright requiere una amplia configuración centrada en pruebas que los ingenieros de control de calidad comprenden, pero que los desarrolladores de documentos no deberían necesitar:

Se requiere instalación del navegador:

# Manual installation step required before first use
playwright install  # Downloads 400MB+ of browser binaries
# Or programmatically:
playwright install chromium  # Still 100MB+ for single browser
SHELL

Configuración de inicio del navegador:

// Testing-focused launch options for PDF generation
using var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions
{
    Headless = true,  // Required for server environments
    Args = new[] { "--disable-gpu", "--no-sandbox" } // Linux/Docker configs
});

Opciones de configuración específicas de la prueba:

  • Headless: Se debe configurar el modo sin cabeza para producción (el valor predeterminado es el modo con cabeza para prueba)
  • SlowMo: Retrasos en el tiempo de prueba (irrelevante para la generación de PDF)
  • Devtools: Configuración de herramientas de prueba (no es necesario para los documentos)
  • ExecutablePath: Rutas de navegador personalizadas para entornos de prueba
  • Proxy: Interceptación de red para pruebas (sobrecarga innecesaria)
  • DownloadsPath: Gestión de artefactos de prueba
  • TracesDir: Rastreos de ejecución de pruebas

Gestión del contexto del navegador:

// Complex context lifecycle from testing paradigm
var context = await browser.NewContextAsync(new BrowserNewContextOptions
{
    ViewportSize = new ViewportSize { Width = 1920, Height = 1080 },
    UserAgent = "custom-user-agent",
    Locale = "en-US",
    TimezoneId = "America/New_York"
});
var page = await context.NewPageAsync();
// ... generate PDF ...
await context.CloseAsync();  // Manual cleanup required
await browser.CloseAsync();  // Manual cleanup required

Complejidad de múltiples navegadores:

// Playwright downloads multiple browsers by default
await playwright.Chromium.LaunchAsync();  // For Chrome testing
await playwright.Firefox.LaunchAsync();   // For Firefox testing
await playwright.Webkit.LaunchAsync();    // For Safari testing
// All downloaded but only Chromium needed for PDF generation

IronPDF: configuración cero, instalación cero

// No installation, no configuration, no lifecycle management
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

**Plug and play real:**IronPDF elimina toda la sobrecarga del marco de prueba. Sin comandos de instalación del navegador, sin configuración headless, sin gestión de contexto: solo instanciar y renderizar. Creado específicamente para la generación de documentos, no adaptado de herramientas de prueba.

Comparación del rendimiento de Playwright frente a IronPDF

MétricaPlaywrightIronPDF
Finalidad principalMarco de pruebas E2EGeneración de documentos PDF
Filosofía del diseñoHerramienta de prueba con función de lado PDFBiblioteca PDF especialmente diseñada
Requiere instalaciónplaywright install (más de 400 MB de descarga)Ninguno - configuración instantánea
Configuración requeridaModo sin cabeza, opciones de inicio del navegador, contextosConfiguración cero
Descarga del navegadorMás de 400 MB (Chromium, Firefox, WebKit)Motor integrado optimizado
Complejidad de configuraciónConfiguración de instalación y lanzamiento desde la línea de comandosConectar y usar
Primer renderizado (arranque en frío)4.5 segundos2.8 segundos
Traducciones posteriores3.8-4.1 segundos0.8-1.2 segundos
Memoria por conversión280-420 MB80-120 MB
Complejidad de la APICiclo de vida asincrónico complejo de navegador/contexto/páginaFrases sencillas sincrónicas de una sola línea
InicializaciónCreateAsync() + LaunchAsync() + NewPageAsync()new ChromePdfRenderer()
Soporte PDF/ANo disponibleApoyado
Accesibilidad PDF/UANo disponibleApoyado
Firmas digitalesNo disponibleApoyado
Edición de PDFNo disponibleFusionar, dividir, estampar, editar
Soporte profesionalComunidadComercial con SLA

IronPDF se creó centrándose en la generación de PDF. A diferencia de Playwright, centrado en las pruebas,IronPDF ofrece diversas funciones de API centradas en los documentos. Se basa en una única instancia optimizada de Chromium, que favorece la eficiencia y ofrece operaciones síncronas y asíncronas. El resultado es un modelo mental y un flujo de trabajo más sencillos para los desarrolladores que requieren funcionalidades PDF.

Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDF ofrece una solución de PDF diseñada específicamente que elimina la sobrecarga de automatización del navegador y, al mismo tiempo, ofrece un mejor rendimiento y funciones de documentos profesionales.

El resultado final

Playwright es el marco de pruebas de Microsoft diseñado para ingenieros de control de calidad que ejecutan pruebas automatizadas en varios navegadores. Su uso para la generación de PDF supone una discordancia arquitectónica que requiere amplios conocimientos específicos de pruebas:

  • Instalación manual del navegador (playwright install)
  • Configuración del modo sin cabeza para producción
  • Gestión de opciones de inicio del navegador
  • Configuración del ciclo de vida del contexto
  • Descargas multinavegador (400 MB+) cuando solo se necesita uno
  • Patrones complejos async/await del paradigma de prueba

IronPDF es una biblioteca de generación de documentos diseñada para desarrolladores que crean flujos de trabajo PDF. Es realmente plug-and-play:

  • Instalación cero: funciona inmediatamente
  • Configuración cero: valores predeterminados inteligentes
  • Cero descargas de navegador: motor optimizado incluido
  • API simple: no es necesario probar conceptos para aprender
  • Gestión automática de recursos: sin complejidad en el ciclo de vida

Si necesita probar aplicaciones web en distintos navegadores, utilice Playwright. Si necesita generar documentos PDF, utilice IronPDF. No adapte un marco de prueba para la generación de documentos: utilice la herramienta creada específicamente para el trabajo.


Antes de empezar

Prerrequisitos

  1. Entorno .NET : .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Acceso a NuGet : Capacidad para instalar paquetes NuGet
  3. Licencia de IronPDF: Obtenga su clave de licencia en IronPDF

Cambios en el paquete NuGet

# Remove Playwright
dotnet remove package Microsoft.Playwright

# Remove browser binaries (reclaim ~400MB disk space)
# Delete the .playwright folder in your project or user directory

# Add IronPDF
dotnet add package IronPdf
SHELL

No se requiere playwright install con IronPDF : el motor de renderizado se incluye automáticamente.

Configuración de licencias

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Referencia completa de la API

Cambios en el espacio de nombres

// Before: Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;

Mapeos de API principales

API de PlaywrightAPI de IronPDF
Playwright.CreateAsync()new ChromePdfRenderer()
playwright.Chromium.LaunchAsync()No es necesario
browser.NewPageAsync()No es necesario
page.GotoAsync(url)renderer.RenderUrlAsPdf(url)
page.SetContentAsync(html) + page.PdfAsync()renderer.RenderHtmlAsPdf(html)
page.CloseAsync()No es necesario
browser.CloseAsync()No es necesario
PagePdfOptions.FormatRenderingOptions.PaperSize
PagePdfOptions.MarginRenderingOptions.MarginTop/Bottom/Left/Right
PagePdfOptions.DisplayHeaderFooterTextFooter
PagePdfOptions.HeaderTemplateRenderingOptions.HtmlHeader
PagePdfOptions.FooterTemplateRenderingOptions.HtmlFooter
<span class='pageNumber'>{page}

Ejemplos de migración de código

Ejemplo 1: Conversión de cadenas HTML a PDF

Antes (Playwright):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();
        
        string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
        await page.SetContentAsync(html);
        await page.PdfAsync(new PagePdfOptions { Path = "output.pdf" });
        
        await browser.CloseAsync();
    }
}

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        
        string html = "<h1>Hello World</h1><p>This is a test PDF.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}

Este ejemplo demuestra la diferencia arquitectónica fundamental. Playwright requiere cinco operaciones asincrónicas: Playwright.CreateAsync(), Chromium.LaunchAsync(), NewPageAsync(), SetContentAsync() y PdfAsync(), además de una limpieza explícita del navegador con CloseAsync().

IronPDF elimina toda esta complejidad: crea un ChromePdfRenderer, llama a RenderHtmlAsPdf() y SaveAs(). Sin patrones async, sin ciclo de vida del navegador, sin código de limpieza. El enfoque de IronPDFofrece una sintaxis más limpia y una mejor integración con las aplicaciones .NET modernas. Consulte la documentación HTML a PDF para ver ejemplos completos.

Ejemplo 2: Conversión de URL a PDF

Antes (Playwright):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();
        
        await page.GotoAsync("https://www.example.com");
        await page.PdfAsync(new PagePdfOptions 
        { 
            Path = "webpage.pdf",
            Format = "A4"
        });
        
        await browser.CloseAsync();
    }
}

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}

Playwright usa GotoAsync() para navegar a una URL seguido de PdfAsync().IronPDF proporciona un único método RenderUrlAsPdf() que maneja la navegación y la generación de PDF en una sola llamada. Tenga en cuenta que Playwright requiere especificar Format en PagePdfOptions, mientras que IronPDF usa RenderingOptions.PaperSize para la configuración del tamaño del papel. Más información en nuestros tutoriales.

Ejemplo 3: Tamaño de página personalizado con márgenes

Antes (Playwright):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var playwright = await Playwright.CreateAsync();
        await using var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();
        await page.SetContentAsync("<h1>Custom PDF</h1><p>Letter size with margins</p>");
        await page.PdfAsync(new PagePdfOptions 
        { 
            Path = "custom.pdf",
            Format = "Letter",
            Margin = new Margin { Top = "1in", Bottom = "1in", Left = "0.5in", Right = "0.5in" }
        });
    }
}

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.MarginTop = 25;
        renderer.RenderingOptions.MarginBottom = 25;
        renderer.RenderingOptions.MarginLeft = 12;
        renderer.RenderingOptions.MarginRight = 12;
        var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Letter size with margins</p>");
        pdf.SaveAs("custom.pdf");
    }
}

Playwright utiliza valores de margen basados ​​en cadenas ("1in", "0.5in") mientras que IronPDF utiliza valores numéricos en milímetros. La conversión es: 1 pulgada = 25,4 mm, por lo que "1in" se convierte en 25 y "0.5in" se convierte aproximadamente en 12. El Format = "Letter" del Playwright se corresponde con el PaperSize = PdfPaperSize.Letter de IronPDF.

Ejemplo 4: Encabezados, pies de página y configuración personalizada

Antes (Playwright):

// NuGet: Install-Package Microsoft.Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var playwright = await Playwright.CreateAsync();
        var browser = await playwright.Chromium.LaunchAsync();
        var page = await browser.NewPageAsync();
        
        string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
        await page.SetContentAsync(html);
        
        await page.PdfAsync(new PagePdfOptions
        {
            Path = "custom.pdf",
            Format = "A4",
            Margin = new Margin { Top = "1cm", Bottom = "1cm", Left = "1cm", Right = "1cm" },
            DisplayHeaderFooter = true,
            HeaderTemplate = "<div style='font-size:10px; text-align:center;'>Header</div>",
            FooterTemplate = "<div style='font-size:10px; text-align:center;'>Page <span class='pageNumber'></span></div>"
        });
        
        await browser.CloseAsync();
    }
}

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        
        renderer.RenderingOptions.MarginTop = 10;
        renderer.RenderingOptions.MarginBottom = 10;
        renderer.RenderingOptions.MarginLeft = 10;
        renderer.RenderingOptions.MarginRight = 10;
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.TextHeader.CenterText = "Header";
        renderer.RenderingOptions.TextFooter.CenterText = "Page {page}";
        
        string html = "<h1>Custom PDF</h1><p>With margins and headers.</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("custom.pdf");
    }
}

Este ejemplo muestra la diferencia de sintaxis entre los marcadores de posición de encabezado y pie de página. Playwright utiliza marcadores de posición basados ​​en clases HTML (<span class='pageNumber'></span>), mientras que IronPDF utiliza marcadores de posición entre llaves ({page}). Tenga en cuenta que Playwright requiere DisplayHeaderFooter = true para habilitar encabezados y pies de página, mientras que IronPDF los habilita automáticamente cuando configura el contenido del encabezado y pie de página.


Notas de migración críticas

Conversión de Async a Sync

Playwright requiere async/await en todo momento;IronPDF admite operaciones síncronas:

// Playwright: Async required
public async Task<byte[]> GeneratePdfAsync(string html)
{
    using var playwright = await Playwright.CreateAsync();
    await using var browser = await playwright.Chromium.LaunchAsync();
    var page = await browser.NewPageAsync();
    await page.SetContentAsync(html);
    return await page.PdfAsync();
}

// IronPDF: Sync is simpler
public byte[] GeneratePdf(string html)
{
    var renderer = new ChromePdfRenderer();
    return renderer.RenderHtmlAsPdf(html).BinaryData;
}

Conversión de unidades de margen

Playwright utiliza unidades de cadena;IronPDF utiliza milímetros numéricos:

PlaywrightIronPDF(mm)
"1in"25
"0.5in"12
"1cm"10

Conversión de marcadores de posición de encabezado/pie

Clase de dramaturgiaMarcador de posición IronPDF
<span class='pageNumber'>{page}
<span class='totalPages'>{total-pages}
<span class='date'>{date}
<span class='title'>{html-title}

Eliminación del ciclo de vida del navegador

Elimine todo el código de gestión del navegador:

// Playwright: Explicit cleanup required
await page.CloseAsync();
await browser.CloseAsync();
playwright.Dispose();

// IronPDF: No disposal needed - just use the renderer
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

Nuevas capacidades tras la migración

Tras migrar a IronPDF, obtendrá funciones que Playwright no puede ofrecer:

Fusión de PDF

var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");

Marcas de agua

pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");

Protección con contraseña

pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

Firmas digitales

var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);

Cumplimiento de PDF/A

pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);

Lista de comprobación de la migración

Pre-Migración

  • Identificar todos los códigos de generación de PDF de Playwright
  • Valores de márgenes del documento (convertir pulgadas/cm a milímetros)
  • Nota sobre la sintaxis de marcador de posición de encabezado/pie de página para la conversión
  • Obtenga la clave de licencia de IronPDFen IronPDF

Cambios en el paquete

  • Eliminar el paquete NuGet Microsoft.Playwright
  • Eliminar la carpeta .playwright para recuperar ~400 MB de espacio en disco
  • Instalar IronPdf el paquete NuGet : dotnet add package IronPdf

Cambios de código

  • Actualizar las importaciones de espacios de nombres
  • Reemplace el ciclo de vida del navegador asíncrono con ChromePdfRenderer
  • Convertir page.SetContentAsync() + page.PdfAsync() a RenderHtmlAsPdf()
  • Convertir page.GotoAsync() + page.PdfAsync() a RenderUrlAsPdf()
  • Convertir cadenas de margen a valores milimétricos
  • Convertir la sintaxis de marcador de posición de encabezado/pie de página
  • Eliminar todo el código de eliminación de páginas/navegadores
  • Agregar inicialización de licencia al iniciar la aplicación

Posmigración

  • Comparación visual de la salida PDF
  • Verificar la representación del encabezado/pie de página con números de página
  • Pruebe la precisión del margen y del tamaño de la página
  • Agregue nuevas capacidades (seguridad, marcas de agua, fusión) según sea necesario

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta