Saltar al pie de página
GUíAS DE MIGRACIóN

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:

  1. Conjunto de funciones limitado: PeachPDFcarece de funciones avanzadas como firmas digitales, compatibilidad con PDF/Ay extracción de texto sofisticada.

  2. 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.

  3. Futuro incierto: Las nuevas bibliotecas sin antecedentes establecidos conllevan riesgos de adopción.

  4. Compatibilidad básica con HTML: capacidades limitadas de representación de CSS y JavaScript.

  5. 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
Cumplimiento de PDF/A No
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

  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.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 IronPdf
SHELL

Configuración de licencias

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

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" .
SHELL

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;
$vbLabelText   $csharpLabel

Mapeos de API principales

PeachPDF IronPDF Notas
nuevo HtmlToPdfConverter() <código>new ChromePdfRenderer()` Crear renderizador
converter.Convert(html) renderer.RenderHtmlAsPdf(html) HTML a PDF
<código>converter.ConvertUrl(url)` <código>renderer.RenderUrlAsPdf(url) URL a PDF
converter.Header renderer.RenderingOptions.HtmlHeader Contenido de la cabecera
convertidor.pie <código>renderer.RenderingOptions.HtmlFooter` Contenido del pie de página
<código>File.WriteAllBytes(path, pdf) <código>pdf.SaveAs(ruta) Guardar archivo
pdf (byte[]) <código>pdf.BinaryData` Obtener bytes
<código>PdfReader.LoadFromFile(path) <código>PdfDocument.FromFile(path) Cargar PDF
document.MergeWith(other) <código>PdfDocument.Merge(pdfs)` 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);
    }
}
$vbLabelText   $csharpLabel

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");
    }
}
$vbLabelText   $csharpLabel

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()para guardar.IronPDFutilizaChromePdfRendererconRenderHtmlAsPdf()que devuelve un objetoPdfDocumentcon un método <código>SaveAs()incorporado.

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);
    }
}
$vbLabelText   $csharpLabel

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");
    }
}
$vbLabelText   $csharpLabel

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);
    }
}
$vbLabelText   $csharpLabel

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");
    }
}
$vbLabelText   $csharpLabel

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();
$vbLabelText   $csharpLabel

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;
$vbLabelText   $csharpLabel

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>" 
};
$vbLabelText   $csharpLabel

Cambios en los nombres de los métodos

PeachPDF IronPDF
Convertir(html) <código>RenderHtmlAsPdf(html)`
ConvertirUrl(url) <código>RenderUrlAsPdf(url)`
<código>File.WriteAllBytes() <código>SaveAs()

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");
$vbLabelText   $csharpLabel

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");
$vbLabelText   $csharpLabel

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");
$vbLabelText   $csharpLabel

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");
$vbLabelText   $csharpLabel

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");
$vbLabelText   $csharpLabel

Resumen comparativo de características

Característica PeachPDF IronPDF
HTML a PDF Básico Chromium completo
URL a PDF Limitado
Rejilla CSS/Flexbox No
JavaScript Limitado ES2024 completo
Fusionar PDF
Dividir PDF Limitado
Marcas de agua Limitado HTML completo
Encabezados/pies de página Básico HTML completo
Firmas digitales No
PDF/A No
Relleno de formularios Limitado
Extracción de Texto Básico
Extracción de imágenes No
Soporte de Async Limitado
Multiplataforma Desconocido

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);
$vbLabelText   $csharpLabel

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 HtmlToPdfConverter con ChromePdfRenderer
  • Reemplace converter.Convert(html)con renderer.RenderHtmlAsPdf(html)
  • Reemplace <código>converter.ConvertUrl(url)conrenderer.RenderUrlAsPdf(url)`
  • Reemplace <código>File.WriteAllBytes(path, pdf)conpdf.SaveAs(path)`
  • Reemplace converter.Header/ Footer con objetos RenderingOptions.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

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 ...

Leer más