Cómo migrar de Playwright a IronPDF en C#
Migrar de Escritora IronPDF: Guía completa de migración a C
La migración de Escritorfor .NET aIronPDFtransforma 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 Escritora IronPDF
Entender Escritorpara .NET
Playwright para .NET forma parte de la familia de herramientas de automatización de navegadores de Microsoft; está estructurado en torno a la entrega de capacidades de prueba integrales a través de Chromium, Firefox y WebKit. La biblioteca adopta un diseño "testing-first", lo que significa que se centra principalmente en escenarios que implican pruebas basadas en navegador. Aunque Escritoradmite la generación de PDF, esta funcionalidad es más bien una característica complementaria y no ofrece la configuración granular que se ve en las herramientas PDF dedicadas.
Playwright for .NET es principalmente un marco de trabajo de automatización y pruebas de navegadores en el que la generación de PDF es una función secundaria. Al igual que PuppeteerSharp, Escritorgenera archivos PDF utilizando la función de impresión a PDF del navegador, que equivale a pulsar Ctrl+P. De este modo, se obtiene un resultado optimizado para la impresión. Esto produce una salida optimizada para papel, que difiere de la representación en pantalla.
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:
se requieren descargas de navegador de más de 400 MB antes del primer uso. La configuración por defecto de Escritorimplica la descarga de varios navegadores, lo que puede ser una consideración para entornos con estrictas limitaciones de recursos.
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.
Arquitectura de pruebas no optimizada para la generación de documentos.
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.
No es compatible con PDF/A ni PDF/UA por motivos de accesibilidad. Escritorno 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.
- Operaciones con muchos recursos que requieren instancias completas del navegador.
Comparación del rendimiento de Escritorfrente a IronPDF
| Métrica | Escritor | IronPDF |
|---|---|---|
| Finalidad principal | Pruebas de navegador | Generación de PDF |
| Descarga del navegador | 400MB+ (Chromium, Firefox, WebKit) | Motor integrado optimizado |
| Primer renderizado (arranque en frío) | 4.5 segundos | 2.8 segundos |
| Traducciones posteriores | 3.8-4.1 segundos | 0.8-1.2 segundos |
| Memoria por conversión | 280-420 MB | 80-120 MB |
| Complejidad de la API | Ciclo de vida asíncrono de navegador/contexto/página | Sincronización de frases |
| Inicialización | playwright install + CreateAsync + LaunchAsync | <código>new ChromePdfRenderer()</código |
| Soporte PDF/A | No disponible | Soporte completo |
| Accesibilidad PDF/UA | No disponible | Soporte completo |
| Firmas digitales | No disponible | Soporte completo |
| Edición de PDF | No disponible | Combinar, dividir, sellar, editar |
| Soporte profesional | Comunidad | Comercial con SLA |
IronPDF se creó centrándose en la generación de PDF. A diferencia de Playwright, centrado en las pruebas,IronPDFofrece 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,IronPDFofrece 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.
Antes de empezar
Prerrequisitos
- <Entorno .NET: .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acceso a NuGet: Capacidad para instalar paquetes NuGet
- Licencia IronPDF: Obtenga su clave de licencia en ironpdf.com
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# 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 IronPdfCon IronPDF no es necesario instalar playwright: el motor de renderizado se incluye automáticamente.
Configuración de licencias
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.comReferencia 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;// Before: Playwright
using Microsoft.Playwright;
using System.Threading.Tasks;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;IRON VB CONVERTER ERROR developers@ironsoftware.comCore API Mappings
| API de Playwright | API de IronPDF | Notas |
|---|---|---|
| <código>Playwright.CreateAsync()</código | <código>new ChromePdfRenderer()</código | No se necesita async |
playwright.Chromium.LaunchAsync() | No es necesario | Sin gestión de navegador |
| <código>browser.NewPageAsync()</código | No es necesario | Sin contexto de página |
| <código>page.GotoAsync(url)</código | <código>renderer.RenderUrlAsPdf(url)</código | Representación directa de URL |
page.SetContentAsync(html) + page.PdfAsync() | renderer.RenderHtmlAsPdf(html) | Método único |
| <código>page.CloseAsync()</código | No es necesario | Limpieza automática |
| <código>browser.CloseAsync()</código | No es necesario | Limpieza automática |
| <código>PagePdfOptions.Format</código | <código>RenderingOptions.PaperSize</código | Tamaño del papel |
| <código>PagePdfOptions.Margin</código | <código>RenderingOptions.MarginTop/Bottom/Left/Right</código | Márgenes individuales |
| <código>PagePdfOptions.DisplayHeaderFooter</código | RenderingOptions.TextHeader/TextFooter | Encabezados/pies de página |
| <código>PagePdfOptions.HeaderTemplate</código | <código>RenderingOptions.HtmlHeader</código | Encabezados HTML |
| <código>PagePdfOptions.FooterTemplate</código | <código>RenderingOptions.HtmlFooter</código | Pies de página HTML |
| <código> class="pageNumber"></código> | {page} | Marcador de posición del número de página |
Ejemplos de migración de código
Ejemplo 1: Conversión de cadenas HTML a PDF
Antes (dramaturgo):
// 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();
}
}// 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();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespué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");
}
}// 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEste ejemplo demuestra la diferencia arquitectónica fundamental. Escritorrequiere cinco operaciones asíncronas: Playwright.CreateAsync(), Chromium.LaunchAsync(), NewPageAsync(), SetContentAsync(), y PdfAsync(), además de una limpieza explícita del navegador con CloseAsync().
IronPDF elimina toda esta complejidad: cree un ChromePdfRenderer, llame a RenderHtmlAsPdf() y SaveAs(). Sin patrones async, sin ciclo de vida del navegador, sin código de limpieza. El enfoque deIronPDFofrece 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 (dramaturgo):
// 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();
}
}// 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();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespué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");
}
}// 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPlaywright utiliza GotoAsync() para navegar a una URL seguida de PdfAsync().IronPDFproporciona un único método RenderUrlAsPdf() que gestiona la navegación y la generación de PDF en una sola llamada. Tenga en cuenta que Escritorrequiere especificar el Formato en PagePdfOptions, mientras queIronPDFutiliza <código>RenderingOptions.PaperSize</códigopara 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 (dramaturgo):
// 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" }
});
}
}// 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" }
});
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespué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");
}
}// 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPlaywright utiliza valores de margen basados en cadenas ("1in", "0.5in"), mientras queIronPDFutiliza valores numéricos en milímetros. La conversión es: 1 pulgada = 25,4 mm, por lo que "1 pulgada" se convierte en <código>25</códigoy "0,5 pulgadas" se convierte aproximadamente en 12. Playwright's Format = "Letter" se corresponde con IronPDF's PaperSize = PdfPaperSize.Letter.
Ejemplo 4: Encabezados, pies de página y configuración personalizada
Antes (dramaturgo):
// 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();
}
}// 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();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespué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");
}
}// 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEste ejemplo muestra la diferencia de sintaxis entre los marcadores de posición de encabezado y pie de página. Escritorutiliza marcadores de posición basados en clases HTML (<span> class="pageNumber"></span>), mientras queIronPDFutiliza marcadores de posición con llaves ({page}). Tenga en cuenta que Escritorrequiere DisplayHeaderFooter = true para habilitar los encabezados/pies de página, mientras queIronPDFlos habilita automáticamente al establecer el contenido del encabezado/pie de página.
Notas de migración críticas
Conversión de Async a Sync
Playwright requiere async/await en todo momento;IronPDFadmite 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;
}// 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;
}IRON VB CONVERTER ERROR developers@ironsoftware.comConversión de unidades de margen
Playwright utiliza unidades de cadena;IronPDFutiliza milímetros numéricos:
| Escritor | IronPDF(mm) |
|---|---|
| <código>"1in"</código> | <código>25</código |
| <código>"0.5in"</código> | <código>12</código |
| <código>"1cm"</código> | <código>10</código |
Conversión de marcadores de posición de encabezado/pie
| Clase de dramaturgia | Marcador de posición IronPDF |
|---|---|
| <código> class="pageNumber"></código> | {page} |
| <código> class="totalPages"></código> | {total de páginas} |
| <código> class="fecha"></código> | {fecha} |
| <código> class="title"></código> | {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");// 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");IRON VB CONVERTER ERROR developers@ironsoftware.comNuevas capacidades tras la migración
Tras migrar a IronPDF, obtendrá funciones que Escritorno 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");var pdf1 = renderer.RenderHtmlAsPdf(html1);
var pdf2 = renderer.RenderHtmlAsPdf(html2);
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comMarcas de agua
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>DRAFT</h1>");IRON VB CONVERTER ERROR developers@ironsoftware.comProtección con contraseña
pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;pdf.SecuritySettings.OwnerPassword = "admin";
pdf.SecuritySettings.UserPassword = "readonly";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;IRON VB CONVERTER ERROR developers@ironsoftware.comFirmas digitales
var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);var signature = new PdfSignature("certificate.pfx", "password");
pdf.Sign(signature);IRON VB CONVERTER ERROR developers@ironsoftware.comCumplimiento de PDF/A
pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);pdf.SaveAsPdfA("archive.pdf", PdfAVersions.PdfA3b);IRON VB CONVERTER ERROR developers@ironsoftware.comLista de comprobación de la migración
Pre-Migración
- [ ] Identificar todo el código de generación de PDF de Playwright
- [ ] Valores de margen del documento (convertir pulgadas/cm a milímetros)
- [ ] Tenga en cuenta la sintaxis del encabezado/pie de página para la conversión
- [ ] Obtenga la clave de licencia deIronPDFen ironpdf.com
Cambios en el paquete
- [ ] Eliminar el paquete NuGet
Microsoft.Playwright - [ ] Eliminar la carpeta
.playwrightpara recuperar ~400 MB de espacio en disco - [Instale el paquete NuGet
IronPdf:dotnet add package IronPdf
Cambios de código
- [ ] Actualizar las importaciones de espacios de nombres
- [Reemplazar el ciclo de vida asíncrono del navegador por
ChromePdfRenderer - [Convertir
page.SetContentAsync()+page.PdfAsync()enRenderHtmlAsPdf() - [Convertir
page.GotoAsync()+page.PdfAsync()enRenderUrlAsPdf() - [ ] Convertir cadenas de márgenes en valores milimétricos
- [ ] Convertir la sintaxis de los marcadores de posición de encabezado/pie de página
- [ ] Eliminar todo el código de eliminación de navegadores/páginas
- [ ] Añadir inicialización de licencia al inicio de la aplicación
Posmigración
- [ ] Comparación visual de la salida PDF
- [ ] Verificar la representación de encabezado/pie de página con números de página
- [ ] Comprobar la precisión de los márgenes y el tamaño de las páginas
- [ ] Añadir nuevas funciones (seguridad, marcas de agua, fusión) según sea necesario
Conclusión
Tanto Escritorfor .NET comoIronPDFsatisfacen necesidades distintas dentro del ecosistema .NET. La fuerza de Escritorreside en las capacidades de su marco de pruebas, que pueden complementarse con su función de generación de PDF cuando sea necesario. Sin embargo, si su objetivo principal es la generación eficiente de PDF de alta calidad con menos gastos generales,IronPDFes un contendiente más fuerte.
Los cambios clave en esta migración son:
- Arquitectura: Marco de trabajo de pruebas con función PDF → Biblioteca PDF especialmente diseñada
- Complejidad: 5+ operaciones asíncronas → 3 llamadas síncronas
- Gestión de navegadores: Ciclo de vida manual con eliminación → Gestión automática
- Rendimiento: 4,5s arranque en frío / 3,8-4,1s renders → 2,8s arranque en frío / 0,8-1,2s renders
- Memoria: 280-420 MB por conversión → 80-120 MB por conversión
- Espacio en disco: más de 400 MB de descargas del navegador → Cero descargas adicionales
- Margenes: Unidades de cadena (
"1in") → Milímetros numéricos (25) - Placeholders: Clases CSS (
<span> class="pageNumber">) → llaves ({page}) - Nuevas funciones: Fusión de PDF, marcas de agua, seguridad, firmas digitales, conformidad con PDF/A
Tenga en cuenta los requisitos de su proyecto y elija la biblioteca que se ajuste a sus prioridades, ya necesite un marco de pruebas sólido que pueda generar PDF de forma adicional o una herramienta PDF específica que maximice la velocidad de conversión y la eficiencia de los recursos.
Explore la documentación completa de IronPDF, tutoriales y referencia de API para acelerar su migración a Playwright.






