Cómo migrar de ZetPDF a IronPDF en C#
Migración de ZetPDFa IronPDF: Una guía completa para desarrolladores de C
ZetPDF es una biblioteca PDF con licencia comercial para aplicaciones C# creada sobre la base de la biblioteca PDFSharp de código abierto ampliamente utilizada. Aunque ZetPDFofrece soporte comercial y capacidades básicas de manipulación de PDF, hereda importantes limitaciones de su base PDFSharp. En particular, la biblioteca se basa en la programación de gráficos por coordenadas y ofrece capacidades limitadas de conversión de HTML a PDF en comparación con las alternativas modernas.
Esta guía proporciona una ruta de migración completa de ZetPDFa IronPDF, con instrucciones paso a paso, comparaciones de código y ejemplos prácticos para desarrolladores .NET profesionales que estén evaluando esta transición.
Por qué migrar de ZetPDF
ZetPDF, como bifurcación de PDFSharp, hereda las mismas restricciones arquitectónicas que limitan su eficacia para los flujos de trabajo modernos de generación de documentos. Entre las principales razones por las que los equipos de desarrollo se plantean la migración se incluyen:
API basada en coordenadas: ZetPDFobliga a los desarrolladores a posicionar cada elemento con coordenadas exactas. La compleja colocación manual de cada elemento plantea problemas de mantenimiento a medida que cambian los requisitos.
Soporte CSS limitado: La ausencia de un sistema de estilos implica la gestión manual de fuentes y colores para cada elemento.
Sin renderización de JavaScript: No se puede renderizar contenido web dinámico ni ejecutar JavaScript durante la generación de PDF.
Ofertas únicas limitadas: En comparación con el uso de PDFSharp directamente sin coste alguno, ZetPDFofrece pocas razones de peso que hagan necesaria su licencia comercial.
Saltos de página manuales: Debe calcular y gestionar el desbordamiento de página manualmente en lugar de confiar en la paginación automática.
Se requiere medición de texto: El cálculo manual para el ajuste de texto genera una sobrecarga adicional de desarrollo.
El problema fundamental
ZetPDF y PDFSharp obligan a posicionar cada elemento con coordenadas exactas:
// ZetPDF: Manualpositioning nightmare
graphics.DrawString("Name:", font, brush, new XPoint(50, 100));
graphics.DrawString("John Doe", font, brush, new XPoint(100, 100));
graphics.DrawString("Address:", font, brush, new XPoint(50, 120));
graphics.DrawString("123 Main St", font, brush, new XPoint(100, 120));
// ... hundreds of lines for a simple form// ZetPDF: Manualpositioning nightmare
graphics.DrawString("Name:", font, brush, new XPoint(50, 100));
graphics.DrawString("John Doe", font, brush, new XPoint(100, 100));
graphics.DrawString("Address:", font, brush, new XPoint(50, 120));
graphics.DrawString("123 Main St", font, brush, new XPoint(100, 120));
// ... hundreds of lines for a simple formIRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF utiliza HTML/CSS: el motor de diseño se encarga de todo:
// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);// IronPDF: Simple HTML
var html = @"
<p><strong>Name:</strong> John Doe</p>
<p><strong>Address:</strong> 123 Main St</p>";
var pdf = renderer.RenderHtmlAsPdf(html);IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDFfrente a ZetPDF: Comparación de características
Comprender las diferencias arquitectónicas ayuda a los responsables técnicos a evaluar la inversión en migración:
| Característica | ZetPDF | IronPDF |
|---|---|---|
| Basado en PDFSharp | Sí | No |
| Conversión de HTML a PDF | Limitado | Sí (Chromium completo) |
| Licencia comercial | Sí, Perpetual | Sí |
| Fundación Código Abierto | PDFSharp (Licencia MIT) | Basado en Chromium |
| Soporte CSS | No | CSS3 completo |
| JavaScript | No | ES2024 completo |
| Diseño automático | No | Sí |
| Saltos de página automáticos | No | Sí |
| Tablas | Dibujo manual | HTML <código> |
| Cabeceras/Pies de página | Manual | HTML/CSS |
| Marcas de agua | Código del manual | Incorporado en |
| Fusionar PDF | Limitado | Sí |
| Dividir PDF | Limitado | Sí |
| Firmas digitales | No | Sí |
| PDF/A | No | Sí |
| Simplicidad y facilidad de uso | Moderado | Alta |
Inicio rápido: Migración de ZetPDFa IronPDF
La migración puede comenzar inmediatamente con estos pasos básicos.
Paso 1: Sustituir el paquete NuGet
Eliminar ZetPDF:
# Remove ZetPDF
dotnet remove package ZetPDF# Remove ZetPDF
dotnet remove package ZetPDFInstalar IronPDF:
# Install IronPDF
dotnet add package IronPdf# Install IronPDF
dotnet add package IronPdfPaso 2: Actualizar los espacios de nombres
Sustituya los espacios de nombres ZetPDFpor el espacio de nombres IronPdf:
// Before (ZetPDF)
using ZetPdf;
using ZetPdf.Drawing;
using ZetPdf.Fonts;
// After (IronPDF)
using IronPdf;// Before (ZetPDF)
using ZetPdf;
using ZetPdf.Drawing;
using ZetPdf.Fonts;
// After (IronPDF)
using IronPdf;IRON VB CONVERTER ERROR developers@ironsoftware.comPaso 3: Inicializar licencia
Añadir inicialización de licencia al inicio de la aplicación:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"Ejemplos de migración de código
Convertir HTML a PDF
La operación de HTML a PDF demuestra las diferencias de API entre estas bibliotecas PDF .NET.
Enfoque ZetPDF:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully");
}
}// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
converter.ConvertHtmlToPdf(htmlContent, "output.pdf");
Console.WriteLine("PDF created successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEnfoque IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comZetPDF utiliza <código>HtmlToPdfConverter</códigocon <código>ConvertHtmlToPdf()</códigoque escribe directamente en una ruta de archivo.IronPDFproporciona <código>ChromePdfRenderer</códigocon <código>RenderHtmlAsPdf()</códigoque devuelve un objeto PdfDocument, dándole más flexibilidad con la salida: puede guardar en un archivo, obtener datos binarios o realizar operaciones adicionales antes de guardar.
Para situaciones avanzadas de conversión de HTML a PDF, consulte la Guía de conversión de HTML a PDF.
Convertir URL en PDF
La conversión de URL a PDF muestra claramente las diferencias de patrón.
Enfoque ZetPDF:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
converter.ConvertUrlToPdf(url, "webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
converter.ConvertUrlToPdf(url, "webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEnfoque IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF from URL created successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comZetPDF utiliza la misma clase <código>HtmlToPdfConverter</códigocon ConvertUrlToPdf().IronPDFproporciona <código>RenderUrlAsPdf()</códigoen ChromePdfRenderer, que aprovecha un motor de renderizado Chromium completo para la captura precisa de páginas web, incluida la ejecución de JavaScript y CSS moderno.
Explore la URL a la documentación PDF para conocer las opciones de autenticación y encabezado personalizado.
Fusión de varios PDF
La fusión de PDF revela importantes diferencias de API en el tratamiento de los documentos.
Enfoque ZetPDF:
// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var merger = new PdfMerger();
var files = new List<string> { "document1.pdf", "document2.pdf" };
merger.MergeFiles(files, "merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}// NuGet: Install-Package ZetPDF
using ZetPDF;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var merger = new PdfMerger();
var files = new List<string> { "document1.pdf", "document2.pdf" };
merger.MergeFiles(files, "merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEnfoque IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdfs = new List<PdfDocument>
{
PdfDocument.FromFile("document1.pdf"),
PdfDocument.FromFile("document2.pdf")
};
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comZetPDF utiliza una clase <código>PdfMerger</códigodedicada que opera sobre rutas de archivos con MergeFiles().IronPDFcarga documentos como objetos PdfDocument utilizando PdfDocument.FromFile(), y luego los fusiona con el método estático PdfDocument.Merge(). Este enfoque orientado a objetos permite realizar operaciones adicionales en el documento fusionado antes de guardarlo.
Explore la documentación sobre la fusión de PDF para conocer otras opciones de fusión.
Dibujo por coordenadas frente a HTML
Para los desarrolladores con código ZetPDFexistente que utilice gráficos basados en coordenadas, la ruta de migración implica convertir los comandos de dibujo a HTML/CSS.
Enfoque basado en coordenadas de ZetPDF:
using ZetPdf;
using ZetPdf.Drawing;
var document = new PdfDocument();
var page = document.AddPage();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);
var graphics = XGraphics.FromPdfPage(page);
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Arial", 12);
graphics.DrawString("Company Report", titleFont, XBrushes.Navy,
new XPoint(50, 50));
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black,
new XPoint(50, 80));
graphics.DrawString("Generated: " + DateTime.Now.ToString(), bodyFont, XBrushes.Gray,
new XPoint(50, 100));
document.Save("report.pdf");using ZetPdf;
using ZetPdf.Drawing;
var document = new PdfDocument();
var page = document.AddPage();
page.Width = XUnit.FromMillimeter(210);
page.Height = XUnit.FromMillimeter(297);
var graphics = XGraphics.FromPdfPage(page);
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Arial", 12);
graphics.DrawString("Company Report", titleFont, XBrushes.Navy,
new XPoint(50, 50));
graphics.DrawString("This is the introduction paragraph.", bodyFont, XBrushes.Black,
new XPoint(50, 80));
graphics.DrawString("Generated: " + DateTime.Now.ToString(), bodyFont, XBrushes.Gray,
new XPoint(50, 100));
document.Save("report.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comEnfoque HTML de IronPDF:
using IronPdf;
var html = $@"
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 50px; }}
h1 {{ color: navy; }}
.date {{ color: gray; }}
</style>
</head>
<body>
<h1>Company Report</h1>
<p>This is the introduction paragraph.</p>
<p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");using IronPdf;
var html = $@"
<html>
<head>
<style>
body {{ font-family: Arial, sans-serif; padding: 50px; }}
h1 {{ color: navy; }}
.date {{ color: gray; }}
</style>
</head>
<body>
<h1>Company Report</h1>
<p>This is the introduction paragraph.</p>
<p class='date'>Generated: {DateTime.Now}</p>
</body>
</html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("report.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comEl enfoque de ZetPDFrequiere crear objetos de fuente, calcular las posiciones exactas de los píxeles y gestionar manualmente el contexto gráfico. El enfoque deIronPDFutiliza HTML y CSS estándar que los desarrolladores web ya conocen: las fuentes, los colores y el diseño se gestionan mediante propiedades CSS familiares.
Referencia de la API de ZetPDFa IronPDF
Este mapeo acelera la migración al mostrar los equivalentes directos de las API:
| ZetPDF | IronPDF | Notas |
|---|---|---|
nuevo PdfDocument() | <código>new ChromePdfRenderer()</código | Crear renderizador |
document.AddPage() | Automático | Páginas creadas a partir de HTML |
| <código>XGraphics.FromPdfPage(page)</código | N/A | Utilice HTML/CSSen su lugar |
| <código>graphics.DrawString()</código> | Elementos de texto HTML | <p>, <h1>, etc. |
| <código>graphics.DrawImage()</código> | <código> | Imágenes HTML |
| <código>graphics.DrawLine()</código> | Bordes CSS | O <hr> |
| <código>graphics.DrawRectangle()</código | CSS borde + div | Cuadros HTML |
nuevo XFont() | CSS family | Fuentes web compatibles |
XBrushes.Black | CSS color | Soporte a todo color |
document.Save() | <código>pdf.SaveAs()</código | Guardar en archivo |
| <código>PdfReader.Open()</código | <código>PdfDocument.FromFile()</código | Cargar PDF existente |
| <código>HtmlToPdfConverter</código | <código>ChromePdfRenderer</código | Conversión de HTML |
| <código>ConvertHtmlToPdf()</código | <código>RenderHtmlAsPdf()</código | Cadena HTML a PDF |
| <código>ConvertUrlToPdf()</código | <código>RenderUrlAsPdf()</código | URL a PDF |
| <código>PdfMerger</código | PdfDocument.Merge() | Combinar PDF |
Problemas comunes de migración y soluciones
Número 1: Diseño basado en coordenadas
ZetPDF: Todo requiere coordenadas X,Y exactas con posicionamiento manual.
Solución: Utilizar diseño de flujo HTML/CSS. Para el posicionamiento absoluto cuando sea necesario, utilice CSS:
.positioned-element {
position: absolute;
top: 100px;
left: 50px;
}Número 2: Gestión de objetos de fuentes
ZetPDF: Crea objetos XFont para cada variación de fuente.
Solución: Utilizar CSS font-family-las fuentes se manejan automáticamente:
<style>
body { font-family: Arial, sans-serif; }
h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style><style>
body { font-family: Arial, sans-serif; }
h1 { font-family: 'Times New Roman', serif; font-size: 24px; font-weight: bold; }
</style>Número 3: Manejo del color
ZetPDF: Utiliza XBrushes y objetos de color.
Solución: Utilizar colores CSS estándar:
.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }Edición 4: Saltos de página manuales
ZetPDF: Rastrea la posición Y y crea nuevas páginas manualmente cuando el contenido se desborda.
Solución:IronPDFgestiona los saltos de página automáticos. Para un control explícito, utilice CSS:
.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }Edición 5: Creación de tablas
ZetPDF: Requiere el dibujo manual de rectángulos, líneas y posicionamiento de texto.
Solución: Utilizar tablas HTML estándar con estilo CSS:
<table style="border-collapse: collapse; width: 100%;">
<tr>
<th style="border: 1px solid black; padding: 8px;">Header</th>
</tr>
<tr>
<td style="border: 1px solid black; padding: 8px;">Data</td>
</tr>
</table><table style="border-collapse: collapse; width: 100%;">
<tr>
<th style="border: 1px solid black; padding: 8px;">Header</th>
</tr>
<tr>
<td style="border: 1px solid black; padding: 8px;">Data</td>
</tr>
</table>Lista de comprobación para la migración a ZetPDF
Tareas previas a la migración
Audite su código base para identificar todo el uso de ZetPDF:
grep -r "using ZetPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|PdfMerger\|XGraphics" --include="*.cs" .grep -r "using ZetPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|PdfMerger\|XGraphics" --include="*.cs" .Documentar código de dibujo basado en coordenadas que necesite conversión a HTML. Tenga en cuenta los patrones de uso de fuentes y colores. Asignar estructuras de diseño a equivalentes HTML.
Tareas de actualización de código
- Eliminar el paquete NuGet de ZetPDF
- Instalación del paquete IronPdf NuGet
- Actualizar las importaciones de espacios de nombres de
ZetPDFaIronPdf - Sustituya <código>HtmlToPdfConverter</códigopor
ChromePdfRenderer - Convertir las llamadas <código>ConvertHtmlToPdf()</códigoen <código>RenderHtmlAsPdf()</código+
SaveAs() - Convertir las llamadas a <código>ConvertUrlToPdf()</códigoen <código>RenderUrlAsPdf()</código+
SaveAs() - Sustituya
PdfMerger.MergeFiles()porPdfDocument.Merge() - Convertir llamadas
DrawString()en elementos de texto HTML - Convertir
XFontafamilyCSS - Sustituir
XBrushespor colores CSS - Añadir la inicialización de la licenciaIronPDFal inicio
Pruebas posteriores a la migración
Tras la migración, verifique estos aspectos:
- Comparar los resultados visuales para garantizar que el aspecto coincida o mejore
- Verificar que las fuentes se muestran como se espera con el estilo CSS
- Prueba de que los saltos de página se producen correctamente con la paginación automática
- Comprobar que las imágenes están colocadas y se muestran correctamente
- Prueba de que las operaciones de fusión de PDF producen resultados correctos
- Confirmar que toda la funcionalidad existente funciona con la nueva implementación
Beneficios clave de migrar a IronPDF
El cambio de ZetPDFaIronPDFofrece varias ventajas fundamentales:
Motor de renderizado moderno Chromium:IronPDFutiliza Chromium para la conversión de HTML a PDF, garantizando una compatibilidad total con CSS3 y JavaScript ES2024. Los frameworks modernos y los diseños responsivos se traducen correctamente.
Creación de contenidos basada en HTML: Los desarrolladores web pueden aprovechar sus conocimientos de HTML y CSS. No es necesario aprender API de dibujo basadas en coordenadas ni gestionar objetos de fuentes.
Diseño y paginación automáticos: El ajuste de texto, los saltos de página y el diseño de flujo se realizan automáticamente. Sin cálculo manual de las posiciones de los elementos.
API simplificada: Llamadas a métodos únicos para operaciones comunes. PdfDocument.Merge()sustituye a los complejos patrones de gestión de rutas de archivos.
Desarrollo Activo: A medida que aumenta la adopción de .NET 10 y C# 14 hasta 2026, las actualizaciones periódicas deIronPDFgarantizan la compatibilidad con las versiones actuales y futuras de .NET.
Completo conjunto de funciones: marca de agua integrada, firmas digitales, conformidad con PDF/A y funciones avanzadas de manipulación de PDF de las que carece ZetPDF.
Conclusión
ZetPDF proporciona capacidades básicas de manipulación de PDF a través de su base PDFSharp. Sin embargo, su enfoque de programación gráfica basado en coordenadas, su compatibilidad limitada con HTML y la falta de funciones modernas crean una complejidad innecesaria para las tareas de generación de documentos.
IronPDF transforma la generación de PDF de un ejercicio de programación gráfica a un desarrollo HTML/CSSfamiliar. La ruta de migración es sencilla: sustituir los paquetes NuGet, actualizar las clases de conversión y aprovechar HTML para la creación de contenidos.
Comience su migración hoy mismo con una prueba gratuita de IronPDF y experimente la sencillez de la generación de documentos basada en Chromium.
Para una guía de implementación completa, explore la documentación de IronPDF y tutoriales.






