Cómo migrar de PeachPDF a IronPDF en C#
La migración de PeachPDFaIronPDFproporciona acceso a la generación de PDF de nivel empresarial con funciones completas, desarrollo activo y asistencia profesional. Esta guía proporciona una ruta de migración completa, paso a paso, que transforma su flujo de trabajo básico de HTML a PDF en una solución PDF con todas las funciones, con el moderno renderizado de Chromium, opciones de seguridad avanzadas y amplias capacidades de manipulación.
Por qué migrar de PeachPDFa IronPDF
Entender PeachPDF
PeachPDF es una herramienta relativamente nueva en el ecosistema .NET diseñada para desarrolladores que necesitan convertir HTML a PDF. Como biblioteca, PeachPDFpromete una implementación .NET pura, diferenciándose por no depender de procesos externos, lo que garantiza que pueda integrarse sin problemas en todas las plataformas que admitan .NET. Esta característica posiciona a PeachPDFcomo una opción atractiva para proyectos que buscan una solución de biblioteca ligera y gestionada.
A pesar de su potencial, PeachPDFaún está en fase de desarrollo, lo que pone de manifiesto tanto sus interesantes posibilidades como sus notables limitaciones. PeachPDFsigue siendo atractivo por su núcleo .NET puro, que promete una implantación sencilla en diversos entornos. Sin embargo, esto también se traduce en una adopción limitada, con una base de usuarios más pequeña y un apoyo impulsado por la comunidad.
Las limitaciones de PeachPDF
PeachPDF es una biblioteca PDF relativamente nueva y menos conocida que carece de la madurez, las funciones y la asistencia de las soluciones establecidas. Razones clave para migrar:
Conjunto de funciones limitado: PeachPDFcarece de funciones avanzadas como firmas digitales, compatibilidad con PDF/Ay extracción de texto sofisticada.
Comunidad pequeña: documentación limitada, ejemplos y apoyo de la comunidad. Con una base de usuarios más pequeña, el apoyo de la comunidad puede ser escaso, lo que dificulta la obtención de asistencia o la búsqueda de documentación exhaustiva.
Futuro incierto: Las nuevas bibliotecas sin antecedentes establecidos conllevan riesgos de adopción.
Compatibilidad básica con HTML: capacidades limitadas de representación de CSS y JavaScript.
- Sin soporte empresarial: No hay soporte profesional ni opciones de SLA.
Comparación entre PeachPDFe IronPDF
| Característica | PeachPDF | IronPDF |
|---|---|---|
| Implementación | .NET puro | Gestionado con amplia compatibilidad |
| Licencia | Código abierto (BSD-3-Clause) | Comercial |
| Base de usuarios | Pequeño | Grande (más de 40 millones de descargas) |
| Soporte | Dirigido a la comunidad | Professional con soporte dedicado |
| Representación HTML | Básico | Chromium completo |
| Soporte CSS | Limitado | CSS3 completo |
| JavaScript | Básico | ES2024 completo |
| Firmas digitales | No | Sí |
| Cumplimiento de PDF/A | No | Sí |
| Documentación | Limitado | Amplia |
| Estado de desarrollo | En desarrollo | Versión madura y estable |
IronPDF destaca por su amplia funcionalidad, ya que no solo admite conversiones de HTML a PDF, sino también OCR, marcas de agua y otras funciones avanzadas. Su estructura de soporte profesional es una ventaja definitiva, ya que ofrece resoluciones rápidas a los problemas a los que se enfrentan los desarrolladores.
Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFofrece funciones completas y un mantenimiento activo que garantizan la estabilidad y la compatibilidad a largo plazo con los marcos .NET modernos.
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 de IronPDF: Obtenga su clave de licencia en ironpdf.com
Cambios en el paquete NuGet
# Remove PeachPDF
dotnet remove package PeachPDF
# Install IronPDF
dotnet add package IronPdf# Remove PeachPDF
dotnet remove package PeachPDF
# Install IronPDF
dotnet add package IronPdfConfiguración de licencias
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";Identificar el uso de PeachPDF
# Audit PeachPDFusage in codebase
grep -r "using PeachPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|Convert\|ConvertUrl" --include="*.cs" .# Audit PeachPDFusage in codebase
grep -r "using PeachPDF" --include="*.cs" .
grep -r "HtmlToPdfConverter\|Convert\|ConvertUrl" --include="*.cs" .Referencia completa de la API
Cambios en el espacio de nombres
// Before: PeachPDF
using PeachPDF;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;// Before: PeachPDF
using PeachPDF;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;Mapeos de API principales
| PeachPDF | IronPDF | Notas |
|---|---|---|
nuevo HtmlToPdfConverter() | <código>new ChromePdfRenderer()</código | Crear renderizador |
converter.Convert(html) | renderer.RenderHtmlAsPdf(html) | HTML a PDF |
| <código>converter.ConvertUrl(url)</código | <código>renderer.RenderUrlAsPdf(url)</código | URL a PDF |
converter.Header | renderer.RenderingOptions.HtmlHeader | Contenido de la cabecera |
convertidor.pie | <código>renderer.RenderingOptions.HtmlFooter</código | Contenido del pie de página |
| <código>File.WriteAllBytes(path, pdf)</código | <código>pdf.SaveAs(ruta)</código | Guardar archivo |
pdf (byte[]) | <código>pdf.BinaryData</código | Obtener bytes |
| <código>PdfReader.LoadFromFile(path)</código | <código>PdfDocument.FromFile(path)</código | Cargar PDF |
document.MergeWith(other) | <código>PdfDocument.Merge(pdfs)</código | Fusionar PDF |
Ejemplos de migración de código
Ejemplo 1: Conversión de cadenas HTML a PDF
Antes (PeachPDF):
using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = converter.Convert(html);
File.WriteAllBytes("output.pdf", pdf);
}
}using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = converter.Convert(html);
File.WriteAllBytes("output.pdf", pdf);
}
}Después (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}Este ejemplo demuestra la diferencia fundamental entre las dos bibliotecas. PeachPDFutiliza HtmlToPdfConverter con un método Convert() que devuelve un byte[], que requiere <código>File.WriteAllBytes()</códigopara guardar.IronPDFutiliza ChromePdfRenderer con RenderHtmlAsPdf() que devuelve un objeto PdfDocument con un método <código>SaveAs()</códigoincorporado.
Las principales ventajas del enfoque deIronPDFson que el objeto PdfDocument se puede manipular (añadir marcas de agua, combinar, ajustes de seguridad) antes de guardarlo, mientras que la matriz de bytes de PeachPDFes un resultado final. 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 (PeachPDF):
using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
var pdf = converter.ConvertUrl(url);
File.WriteAllBytes("webpage.pdf", pdf);
}
}using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var url = "https://www.example.com";
var pdf = converter.ConvertUrl(url);
File.WriteAllBytes("webpage.pdf", pdf);
}
}Después (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");
}
}// 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");
}
}PeachPDF utiliza ConvertUrl() mientras queIronPDFutiliza RenderUrlAsPdf(). La nomenclatura de los métodos enIronPDFes más descriptiva: indica explícitamente que una URL se está convirtiendo en un PDF. Ambas bibliotecas gestionan la conversión de URL a PDF de forma similar, pero el motor Chromium completo deIronPDFproporciona una renderización superior de páginas web modernas con CSS y JavaScriptcomplejos. Más información en nuestros tutoriales.
Ejemplo 3: Añadir encabezados y pies de página
Antes (PeachPDF):
using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.Header = "<div style='text-align:center'>My Header</div>";
converter.Footer = "<div style='text-align:center'>Page {page}</div>";
var html = "<html><body><h1>Document Content</h1></body></html>";
var pdf = converter.Convert(html);
File.WriteAllBytes("document.pdf", pdf);
}
}using PeachPDF;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.Header = "<div style='text-align:center'>My Header</div>";
converter.Footer = "<div style='text-align:center'>Page {page}</div>";
var html = "<html><body><h1>Document Content</h1></body></html>";
var pdf = converter.Convert(html);
File.WriteAllBytes("document.pdf", pdf);
}
}Después (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>My Header</div>" };
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>Page {page}</div>" };
var html = "<html><body><h1>Document Content</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>My Header</div>" };
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>Page {page}</div>" };
var html = "<html><body><h1>Document Content</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}Este ejemplo muestra una diferencia arquitectónica clave. PeachPDFutiliza propiedades de cadena simples (converter.Header y converter.Footer) para encabezados y pies de página.IronPDFutiliza objetos HtmlHeaderFooter asignados a RenderingOptions.HtmlHeader y RenderingOptions.HtmlFooter.
El enfoque deIronPDFofrece más flexibilidad: los objetos HtmlHeaderFooter pueden incluir propiedades adicionales como MaxHeight para controlar el tamaño del encabezado/pie de página. Tenga en cuenta que ambas bibliotecas utilizan {page} como marcador de posición del número de página.IronPDFtambién admite {total-pages} para el recuento total de páginas.
Tenga en cuenta el espacio de nombres adicional necesario para IronPDF: use IronPDF.Rendering; es necesario para la clase HtmlHeaderFooter.
Notas de migración críticas
Cambio de clase de conversor
PeachPDF utiliza HtmlToPdfConverter;IronPDFutiliza ChromePdfRenderer:
// PeachPDF
var converter = new HtmlToPdfConverter();
// IronPDF
var renderer = new ChromePdfRenderer();// PeachPDF
var converter = new HtmlToPdfConverter();
// IronPDF
var renderer = new ChromePdfRenderer();Cambio de tipo de retorno
PeachPDF devuelve byte[];IronPDFdevuelve PdfDocument:
// PeachPDF: Returns byte array
byte[] pdf = converter.Convert(html);
File.WriteAllBytes("output.pdf", pdf);
// IronPDF: Returns PdfDocument object
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or get bytes: byte[] bytes = pdf.BinaryData;// PeachPDF: Returns byte array
byte[] pdf = converter.Convert(html);
File.WriteAllBytes("output.pdf", pdf);
// IronPDF: Returns PdfDocument object
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or get bytes: byte[] bytes = pdf.BinaryData;Cambio de propiedad de encabezado/pie
// PeachPDF: Simple string properties
converter.Header = "<div>Header</div>";
converter.Footer = "<div>Footer</div>";
// IronPDF: HtmlHeaderFooter objects
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Header</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Footer</div>"
};// PeachPDF: Simple string properties
converter.Header = "<div>Header</div>";
converter.Footer = "<div>Footer</div>";
// IronPDF: HtmlHeaderFooter objects
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Header</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Footer</div>"
};Cambios en los nombres de los métodos
| PeachPDF | IronPDF |
|---|---|
Convertir(html) | <código>RenderHtmlAsPdf(html)</código |
ConvertirUrl(url) | <código>RenderUrlAsPdf(url)</código |
| <código>File.WriteAllBytes()</código | <código>SaveAs()</código |
Nuevas capacidades tras la migración
Tras migrar a IronPDF, obtendrá funciones que PeachPDFno puede ofrecerle:
Fusión de PDF
var pdf1 = PdfDocument.FromFile("doc1.pdf");
var pdf2 = PdfDocument.FromFile("doc2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");var pdf1 = PdfDocument.FromFile("doc1.pdf");
var pdf2 = PdfDocument.FromFile("doc2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");Marcas de agua con HTML
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>");
pdf.SaveAs("watermarked.pdf");var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>");
pdf.SaveAs("watermarked.pdf");Protección con contraseña
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SaveAs("protected.pdf");var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SaveAs("protected.pdf");Firmas digitales
using IronPdf.Signing;
var pdf = PdfDocument.FromFile("document.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Document Approval",
SigningLocation = "New York"
};
pdf.Sign(signature);
pdf.SaveAs("signed.pdf");using IronPdf.Signing;
var pdf = PdfDocument.FromFile("document.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Document Approval",
SigningLocation = "New York"
};
pdf.Sign(signature);
pdf.SaveAs("signed.pdf");Operaciones asíncronas
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>");
pdf.SaveAs("async_output.pdf");var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>");
pdf.SaveAs("async_output.pdf");Resumen comparativo de características
| Característica | PeachPDF | IronPDF |
|---|---|---|
| HTML a PDF | Básico | Chromium completo |
| URL a PDF | Limitado | Sí |
| Rejilla CSS/Flexbox | No | Sí |
| JavaScript | Limitado | ES2024 completo |
| Fusionar PDF | Sí | Sí |
| Dividir PDF | Limitado | Sí |
| Marcas de agua | Limitado | HTML completo |
| Encabezados/pies de página | Básico | HTML completo |
| Firmas digitales | No | Sí |
| PDF/A | No | Sí |
| Relleno de formularios | Limitado | Sí |
| Extracción de Texto | Básico | Sí |
| Extracción de imágenes | No | Sí |
| Soporte de Async | Limitado | Sí |
| Multiplataforma | Desconocido | Sí |
Problemas comunes de migración
Tema 1: Diferentes patrones de API
Problema: PeachPDFutiliza un patrón de conversión con salida de matriz de bytes;IronPDFutiliza un patrón de renderizado con salida PdfDocument.
Solución:
// PeachPDFpattern
var converter = new HtmlToPdfConverter();
var pdf = converter.Convert(html);
File.WriteAllBytes(path, pdf);
//IronPDFpattern
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);// PeachPDFpattern
var converter = new HtmlToPdfConverter();
var pdf = converter.Convert(html);
File.WriteAllBytes(path, pdf);
//IronPDFpattern
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);Edición 2: Guardar la diferencia de métodos
Problema: PeachPDFrequiere File.WriteAllBytes();IronPDFincorpora SaveAs().
Solución: Sustituir File.WriteAllBytes("path", pdf) por pdf.SaveAs("path").
Número 3: Objetos de encabezado/pie
Problema: PeachPDFutiliza propiedades de cadena;IronPDFutiliza propiedades de objeto.
Solución: Envolver cadenas HTML en objetos HtmlHeaderFooter con la propiedad HtmlFragment.
Lista de comprobación de la migración
Pre-Migración
- Auditar el uso de PeachPDFen el código base
- Documentar configuraciones personalizadas
- Tenga en cuenta todas las implementaciones de encabezado/pie de página
- Obtenga la clave de licencia deIronPDFen ironpdf.com
- Pruebe primero con la licencia de prueba de IronPDF
Cambios en el paquete
- Eliminar el paquete NuGet
PeachPDF - Instalar el paquete NuGet
IronPdf:dotnet add package IronPdf
Cambios de código
- Actualizar las importaciones de espacios de nombres (
using PeachPDF;→using IronPdf;) - Agregar
using IronPdf.Rendering;para funcionalidad de encabezado/pie de página - Reemplace
HtmlToPdfConverterconChromePdfRenderer - Reemplace
converter.Convert(html)conrenderer.RenderHtmlAsPdf(html) - Reemplace <código>converter.ConvertUrl(url)</códigocon
renderer.RenderUrlAsPdf(url) - Reemplace <código>File.WriteAllBytes(path, pdf)</códigocon
pdf.SaveAs(path) - Reemplace
converter.Header/Footercon objetosRenderingOptions.HtmlHeader/HtmlFooter - Agregar inicialización de licencia al iniciar la aplicación
Posmigración
- Probar la calidad de representación HTML
- Verificación de que el resultado PDF se ajusta a las expectativas
- Pruebe la representación del encabezado/pie de página con números de página
- Agregue nuevas capacidades (seguridad, marcas de agua, fusión) según sea necesario






