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

Cómo migrar de PDFSharp a IronPDF en C#

La migración dePDFSharpaIronPDFtransforma su flujo de trabajo de generación de PDF de dibujo manual basado en coordenadas a plantillas HTML/CSS modernas. Esta guía proporciona una ruta de migración completa, paso a paso, que sustituye el tedioso posicionamiento de estilo GDI+ por tecnologías web, reduciendo drásticamente el tiempo de desarrollo y haciendo que la generación de PDF se pueda mantener mediante conocimientos estándar de HTML/CSS.

Por qué migrar dePDFSharpa IronPDF

Entender PDFSharp

PDFSharp es conocida como una biblioteca de creación de PDF de bajo nivel, que permite a los desarrolladores generar documentos PDF mediante un enfoque programático. Publicado bajo la licencia MIT,PDFSharpconcede a la comunidad de desarrolladores libertad de uso y modificación.PDFSharpfunciona principalmente como una herramienta para dibujar y compilar archivos PDF desde cero, lo que puede ser beneficioso o restrictivo en función de la naturaleza del proyecto.

A veces se piensa erróneamente quePDFSharpes un conversor de HTML a PDF, pero no es así. Su finalidad está dedicada exclusivamente a la creación programática de documentos PDF. Si bien existe un complemento, HtmlRenderer.PdfSharp, destinado a proporcionar capacidades de renderizado HTML, sólo es compatible con CSS 2.1, sin soporte para características CSS modernas como flexbox y grid.

El problema del cálculo de coordenadas

El enfoque GDI+ dePDFSharpsignifica que debe:

  • Calcular posiciones X,Y exactas para cada elemento
  • Seguimiento manual de la altura del contenido para el desbordamiento de la página
  • Maneje usted mismo el ajuste de líneas y la medición de texto
  • Dibujar tablas celda por celda con cálculos de bordes
  • Gestión de documentos de varias páginas con saltos de página manuales

La arquitectura dePDFSharprequiere un profundo conocimiento del posicionamiento mediante coordenadas, lo que a menudo plantea problemas a la hora de crear diseños complejos.

Comparación entrePDFSharpe IronPDF

Característica PDFSharp IronPDF
Licencia MIT (gratuito) Comercial
Soporte HTML a PDF No Sí (compatible con HTML5/CSS3)
Soporte CSS moderno No (sólo CSS 2.1) Sí (CSS3 completo)
Creación de documentos Dibujo por coordenadas Plantillas HTML/CSS
Sistema de diseño Posicionamiento manual X,Y CSS Flow/Flexbox/Grid
Saltos de página Cálculo manual Control automático + CSS
Tablas Dibujar celdas individualmente HTML <código>
Estilización Fuentes/colores basados en código Hojas de estilo CSS
Document API Nivel bajo (requiere coordenadas) Alto nivel (API simplificada)
Actualizaciones Poco frecuente Regular

IronPDF destaca en situaciones en las que es necesario convertir documentos HTML a PDF con total fidelidad. Esta biblioteca .NET es compatible con HTML5 y CSS3, lo que garantiza el cumplimiento de los estándares web modernos. Sus capacidades nativas de HTML a PDF permiten a los desarrolladores aprovechar el contenido web existente o las plantillas diseñadas con herramientas web contemporáneas.

Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFofrece un enfoque moderno que elimina los cálculos de coordenadas a la vez que aprovecha las habilidades de desarrollo web.


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 PDFSharp
dotnet remove package PdfSharp
dotnet remove package PdfSharp-wpf
dotnet remove package PdfSharp.Charting

# Add IronPDF
dotnet add package IronPdf
# Remove PDFSharp
dotnet remove package PdfSharp
dotnet remove package PdfSharp-wpf
dotnet remove package PdfSharp.Charting

# Add IronPDF
dotnet add package IronPdf
SHELL

Configuración de licencias

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

Identificar el uso de PDFSharp

# Find allPDFSharpusages in your codebase
grep -r "PdfSharp\|XGraphics\|XFont\|XBrush\|XPen" --include="*.cs" .
# Find allPDFSharpusages in your codebase
grep -r "PdfSharp\|XGraphics\|XFont\|XBrush\|XPen" --include="*.cs" .
SHELL

Referencia completa de la API

Cambios en el espacio de nombres

// Before: PDFSharp
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using PdfSharp.Pdf.IO;

// After: IronPDF
using IronPdf;
using IronPdf.Editing;
// Before: PDFSharp
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using PdfSharp.Pdf.IO;

// After: IronPDF
using IronPdf;
using IronPdf.Editing;
$vbLabelText   $csharpLabel

Mapeos de API principales

API PDFSharp API de IronPDF Notas
nuevo PdfDocument() <código>ChromePdfRenderer.RenderHtmlAsPdf()` Crear a partir de HTML
document.AddPage() Automático Páginas creadas a partir de contenido HTML
<código>XGraphics.FromPdfPage()` No es necesario Uso de elementos HTML
<código>XGraphics.DrawString() HTML <p>, <h1>, etc. Posición con CSS
<código>XGraphics.DrawImage()| Etiqueta HTML related to Mapeos de API principales` Posición con CSS
XFont CSS font-family, font-size CSS estándar
XBrush, XPen Colores y bordes CSS color, color de fondo
document.Save() <código>pdf.SaveAs()` Funciones similares
<código>PdfReader.Open() <código>PdfDocument.FromFile() Abrir PDF existente

Ejemplos de migración de código

Ejemplo 1: Conversión de HTML a PDF

Antes (PDFSharp):

// NuGet: Install-Package PdfSharp
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using System;

class Program
{
    static void Main()
    {
        //PDFSharpdoes not have built-in HTML a PDFconversion
        // You need to manually parse HTML and render content
        PdfDocument document = new PdfDocument();
        PdfPage page = document.AddPage();
        XGraphics gfx = XGraphics.FromPdfPage(page);
        XFont font = new XFont("Arial", 12);

        // Manualtext rendering (no HTML support)
        gfx.DrawString("Hello from PDFSharp", font, XBrushes.Black,
            new XRect(0, 0, page.Width, page.Height),
            XStringFormats.TopLeft);

        document.Save("output.pdf");
    }
}
// NuGet: Install-Package PdfSharp
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using System;

class Program
{
    static void Main()
    {
        //PDFSharpdoes not have built-in HTML a PDFconversion
        // You need to manually parse HTML and render content
        PdfDocument document = new PdfDocument();
        PdfPage page = document.AddPage();
        XGraphics gfx = XGraphics.FromPdfPage(page);
        XFont font = new XFont("Arial", 12);

        // Manualtext rendering (no HTML support)
        gfx.DrawString("Hello from PDFSharp", font, XBrushes.Black,
            new XRect(0, 0, page.Width, page.Height),
            XStringFormats.TopLeft);

        document.Save("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        //IronPDFhas native HTML a PDFrendering
        var renderer = new ChromePdfRenderer();

        string html = "<h1>Hello from IronPDF</h1><p>Easy HTML a PDFconversion</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        //IronPDFhas native HTML a PDFrendering
        var renderer = new ChromePdfRenderer();

        string html = "<h1>Hello from IronPDF</h1><p>Easy HTML a PDFconversion</p>";
        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Este ejemplo pone de relieve la diferencia más significativa entre las dos bibliotecas.PDFSharpafirma explícitamente que "no tiene integrada la conversión de HTML a PDF"; debe crear manualmente un PdfDocument, añadir una PdfPage, obtener un objeto XGraphics, crear una XFonty utilizar DrawString() con coordenadas XRect.

IronPDF proporciona renderizado nativo de HTML a PDF a través de ChromePdfRenderer. El método RenderHtmlAsPdf() acepta cadenas HTML y las convierte utilizando internamente un motor Chromium.IronPDFconvierte fácilmente archivos HTML a PDF, preservando todos los estilos definidos en HTML5 y CSS3, eliminando la necesidad de cálculos de coordenadas. Consulte la documentación HTML a PDF para ver ejemplos completos.

Ejemplo 2: Añadir texto/marca de agua a un PDF existente

Antes (PDFSharp):

// NuGet: Install-Package PdfSharp
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using PdfSharp.Drawing;
using System;

class Program
{
    static void Main()
    {
        // Open existing PDF
        PdfDocument document = PdfReader.Open("existing.pdf", PdfDocumentOpenMode.Modify);
        PdfPage page = document.Pages[0];

        // Get graphics object
        XGraphics gfx = XGraphics.FromPdfPage(page);
        XFont font = new XFont("Arial", 20, XFontStyle.Bold);

        // Draw text at specific position
        gfx.DrawString("Watermark Text", font, XBrushes.Red,
            new XPoint(200, 400));

        document.Save("modified.pdf");
    }
}
// NuGet: Install-Package PdfSharp
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using PdfSharp.Drawing;
using System;

class Program
{
    static void Main()
    {
        // Open existing PDF
        PdfDocument document = PdfReader.Open("existing.pdf", PdfDocumentOpenMode.Modify);
        PdfPage page = document.Pages[0];

        // Get graphics object
        XGraphics gfx = XGraphics.FromPdfPage(page);
        XFont font = new XFont("Arial", 20, XFontStyle.Bold);

        // Draw text at specific position
        gfx.DrawString("Watermark Text", font, XBrushes.Red,
            new XPoint(200, 400));

        document.Save("modified.pdf");
    }
}
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        // Open existing PDF
        var pdf = PdfDocument.FromFile("existing.pdf");

        // Add text stamp/watermark
        var textStamper = new TextStamper()
        {
            Text = "Watermark Text",
            FontSize = 20,
            Color = IronSoftware.Drawing.Color.Red,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("modified.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;

class Program
{
    static void Main()
    {
        // Open existing PDF
        var pdf = PdfDocument.FromFile("existing.pdf");

        // Add text stamp/watermark
        var textStamper = new TextStamper()
        {
            Text = "Watermark Text",
            FontSize = 20,
            Color = IronSoftware.Drawing.Color.Red,
            VerticalAlignment = VerticalAlignment.Middle,
            HorizontalAlignment = HorizontalAlignment.Center
        };

        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("modified.pdf");
    }
}
$vbLabelText   $csharpLabel

PDFSharp requiere abrir el PDF con <código>PdfReader.Open()especificandoPdfDocumentOpenMode.Modify, acceder a una página, crear un objetoXGraphics, crear unaXFontcon estilo y usarDrawString()con unXPoint` especificando coordenadas X,Y exactas (200, 400).

IronPDF simplifica esta tarea con PdfDocument.FromFile(), un objeto TextStamper con propiedades declarativas (Text, FontSize, Color, VerticalAlignment, HorizontalAlignment) y ApplyStamp(). No es necesario calcular coordenadas: basta con especificar la alineación para queIronPDFse encargue del posicionamiento. Tenga en cuenta que el espacio de nombres IronPdf.Editing es necesario para la funcionalidad de estampado.

Ejemplo 3: Creación de PDF con imágenes

Antes (PDFSharp):

// NuGet: Install-Package PdfSharp
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using System;

class Program
{
    static void Main()
    {
        // Create new PDF document
        PdfDocument document = new PdfDocument();
        PdfPage page = document.AddPage();
        XGraphics gfx = XGraphics.FromPdfPage(page);

        // Load and draw image
        XImage image = XImage.FromFile("image.jpg");

        // Calculate size to fit page
        double width = 200;
        double height = 200;

        gfx.DrawImage(image, 50, 50, width, height);

        // Add text
        XFont font = new XFont("Arial", 16);
        gfx.DrawString("Image in PDF", font, XBrushes.Black,
            new XPoint(50, 270));

        document.Save("output.pdf");
    }
}
// NuGet: Install-Package PdfSharp
using PdfSharp.Pdf;
using PdfSharp.Drawing;
using System;

class Program
{
    static void Main()
    {
        // Create new PDF document
        PdfDocument document = new PdfDocument();
        PdfPage page = document.AddPage();
        XGraphics gfx = XGraphics.FromPdfPage(page);

        // Load and draw image
        XImage image = XImage.FromFile("image.jpg");

        // Calculate size to fit page
        double width = 200;
        double height = 200;

        gfx.DrawImage(image, 50, 50, width, height);

        // Add text
        XFont font = new XFont("Arial", 16);
        gfx.DrawString("Image in PDF", font, XBrushes.Black,
            new XPoint(50, 270));

        document.Save("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create PDF from HTML with image
        var renderer = new ChromePdfRenderer();

        string html = @"
            <h1>Image in PDF</h1>
            <img src='image.jpg' style='width:200px; height:200px;' />
            <p>Easy image embedding with HTML</p>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");

        // Alternative: Add image to existing PDF
        var existingPdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Document</h1>");
        var imageStamper = new IronPdf.Editing.ImageStamper(new Uri("image.jpg"))
        {
            VerticalAlignment = IronPdf.Editing.VerticalAlignment.Top
        };
        existingPdf.ApplyStamp(imageStamper);
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        // Create PDF from HTML with image
        var renderer = new ChromePdfRenderer();

        string html = @"
            <h1>Image in PDF</h1>
            <img src='image.jpg' style='width:200px; height:200px;' />
            <p>Easy image embedding with HTML</p>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");

        // Alternative: Add image to existing PDF
        var existingPdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Document</h1>");
        var imageStamper = new IronPdf.Editing.ImageStamper(new Uri("image.jpg"))
        {
            VerticalAlignment = IronPdf.Editing.VerticalAlignment.Top
        };
        existingPdf.ApplyStamp(imageStamper);
    }
}
$vbLabelText   $csharpLabel

PDFSharp requiere crear un nuevo PdfDocument, añadir una PdfPage, obtener XGraphics, cargar una XImage desde un archivo, calcular la anchura y la altura, utilizar DrawImage() con coordenadas exactas (50, 50, 200, 200) y, a continuación, añadir texto por separado con DrawString().

IronPDF utiliza HTML estándar con una etiqueta <img> y estilo CSS (style='width:200px; altura:200px;&#39;). No se necesitan cálculos de coordenadas: CSS se encarga del diseño.IronPDFtambién proporciona ImageStamper para añadir imágenes a PDF existentes con propiedades de alineación declarativas. Más información en nuestros tutoriales.


Notas de migración críticas

Cambio de paradigma: Coordenadas a HTML/CSS

El cambio más significativo es el paso del dibujo por coordenadas al HTML/CSS:

// PDFSharp: Manualpositioning nightmare
gfx.DrawString("Invoice", titleFont, XBrushes.Black, new XPoint(50, 50));
gfx.DrawString("Customer: John", bodyFont, XBrushes.Black, new XPoint(50, 80));

// IronPDF: Let CSS handle layout
var html = @"
<div style='padding: 50px;'>
    <h1>Invoice</h1>
    <p>Customer: John</p>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// PDFSharp: Manualpositioning nightmare
gfx.DrawString("Invoice", titleFont, XBrushes.Black, new XPoint(50, 50));
gfx.DrawString("Customer: John", bodyFont, XBrushes.Black, new XPoint(50, 80));

// IronPDF: Let CSS handle layout
var html = @"
<div style='padding: 50px;'>
    <h1>Invoice</h1>
    <p>Customer: John</p>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

Migración de fuentes

// PDFSharp: XFont objects
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Times New Roman", 12);

// IronPDF: CSS font properties
var html = @"
<style>
    h1 { font-family: Arial, sans-serif; font-size: 24px; font-weight: bold; }
    p { font-family: 'Times New Roman', serif; font-size: 12px; }
</style>";
// PDFSharp: XFont objects
var titleFont = new XFont("Arial", 24, XFontStyle.Bold);
var bodyFont = new XFont("Times New Roman", 12);

// IronPDF: CSS font properties
var html = @"
<style>
    h1 { font-family: Arial, sans-serif; font-size: 24px; font-weight: bold; }
    p { font-family: 'Times New Roman', serif; font-size: 12px; }
</style>";
$vbLabelText   $csharpLabel

Cambio de carga del documento

// PDFSharp: PdfReader.Open()
PdfDocument document = PdfReader.Open("existing.pdf", PdfDocumentOpenMode.Modify);

// IronPDF: PdfDocument.FromFile()
var pdf = PdfDocument.FromFile("existing.pdf");
// PDFSharp: PdfReader.Open()
PdfDocument document = PdfReader.Open("existing.pdf", PdfDocumentOpenMode.Modify);

// IronPDF: PdfDocument.FromFile()
var pdf = PdfDocument.FromFile("existing.pdf");
$vbLabelText   $csharpLabel

Cambio de método de guardado

// PDFSharp: document.Save()
document.Save("output.pdf");

// IronPDF: pdf.SaveAs()
pdf.SaveAs("output.pdf");
// PDFSharp: document.Save()
document.Save("output.pdf");

// IronPDF: pdf.SaveAs()
pdf.SaveAs("output.pdf");
$vbLabelText   $csharpLabel

Cambio de acceso a la página

// PDFSharp: document.Pages[0]
PdfPage page = document.Pages[0];

// IronPDF: Automáticopage handling or pdf.Pages[0]
// Pages are created automatically from HTML content
// PDFSharp: document.Pages[0]
PdfPage page = document.Pages[0];

// IronPDF: Automáticopage handling or pdf.Pages[0]
// Pages are created automatically from HTML content
$vbLabelText   $csharpLabel

Nuevas capacidades tras la migración

Después de migrar a IronPDF, se obtienen capacidades quePDFSharpno puede proporcionar:

De HTML nativo a PDF

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Modern Web Content</h1>");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Modern Web Content</h1>");
$vbLabelText   $csharpLabel

URL a PDF

var pdf = renderer.RenderUrlAsPdf("https://example.com");
var pdf = renderer.RenderUrlAsPdf("https://example.com");
$vbLabelText   $csharpLabel

Fusión de PDF

var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
$vbLabelText   $csharpLabel

Marcas de agua con HTML

pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
$vbLabelText   $csharpLabel

Resumen comparativo de características

Característica PDFSharp IronPDF
Dibujo por coordenadas ✗(utilice HTML)
HTML a PDF
Compatibilidad con CSS3
Diseño Flexbox/Grid
Estampación de texto ManualXGraphics TextStamper
Estampación de imágenes ManualXImage ImageStamper
Fusionar PDF Manual
URL a PDF
Renderizado web moderno Motor Chromium
Saltos de página automáticos

Lista de comprobación de la migración

Pre-Migración

  • Inventario de todo el uso dePDFSharpen el código base
  • Identificar los tipos de documentos que se generan (informes, facturas, certificados)
  • Tenga en cuenta cualquier gráfico personalizado o operaciones de dibujo
  • Planifique el almacenamiento de la clave de licencia deIronPDF(se recomiendan variables de entorno)
  • Pruebe primero con la licencia de prueba de IronPDF

Cambios en el paquete

  • Eliminar el paquete NuGet PdfSharp
  • Eliminar el paquete NuGet PdfSharp-wpf si se utiliza
  • Eliminar el paquete NuGet PdfSharp.Charting si se utiliza
  • Instalar el paquete NuGet IronPdf : dotnet add package IronPdf

Cambios de código

  • Actualizar las importaciones del espacio de nombres ( using PdfSharp.Pdf;using IronPdf; )
  • Agregar using IronPdf.Editing; para la funcionalidad de estampado
  • Convertir diseños basados en coordenadas a HTML/CSS
  • Reemplazar XFontcon propiedades de fuente CSS
  • Reemplazar XBrush / XPen con colores/bordes CSS
  • Reemplazar <código>XGraphics.DrawString()`con elementos de texto HTML
  • Reemplace <código>XGraphics.DrawImage()con HTML<img> etiquetas
  • Reemplace <código>PdfReader.Open()conPdfDocument.FromFile()`
  • Reemplace document.Save()con pdf.SaveAs()
  • Convertir código de dibujo de tablas a tablas HTML

Posmigración

  • Comparación visual de los PDF generados
  • Probar documentos de varias páginas
  • Verificar la representación de la fuente
  • Agregue nuevas capacidades (HTML a PDF, fusión, marcas de agua) 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