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

Cómo migrar de MigraDoc a IronPDF en C#

La migración de MigraDocaIronPDFtransforma su flujo de trabajo PDF .NET de un modelo de documento programático verboso que requiere la construcción manual elemento por elemento a un enfoque moderno basado en HTML/CSSque aprovecha las habilidades de desarrollo web existentes. Esta guía proporciona una ruta de migración completa y paso a paso que elimina la pronunciada curva de aprendizaje del modelo de objetos de documentos patentado de MigraDocpara desarrolladores .NET profesionales.

Por qué migrar de MigraDoca IronPDF

Los retos de MigraDoc

MigraDoc, aunque potente para la generación programática de PDF, tiene limitaciones fundamentales que afectan a los flujos de trabajo de desarrollo modernos:

  1. No hay soporte para HTML: MigraDocno soporta HTML directamente. Los documentos deben construirse manualmente, elemento por elemento, mediante los objetos Document, Section, Párrafoy Table; no se pueden aprovechar los diseños HTML/CSSexistentes.

  2. Modelo de documento propietario: MigraDocrequiere aprender un modelo de documento único con conceptos como AddSection() , AddParagraph() , AddTable() , AddRow() y AddCell() . Esta pronunciada curva de aprendizaje es especialmente difícil para los desarrolladores con experiencia en desarrollo web.

  3. Opciones de estilo limitadas: si bien MigraDocofrece una sólida gestión de la estructura de los documentos, sus capacidades de estilo son modestas en comparación con las herramientas web modernas. Propiedades como Format.Font.Size, Format.Font.Bold y Format.Alignment son limitadas en comparación con CSS3 completo.

  4. Código detallado: crear incluso diseños simples requiere docenas de líneas de código. Una tabla básica con encabezados puede requerir entre 15 y 20 líneas de código MigraDoc.

  5. Sin compatibilidad con JavaScript: MigraDocno puede representar contenido dinámico ni ejecutar JavaScript, lo que limita las opciones para gráficos modernos y elementos interactivos.

  6. Los gráficos son básicos: la funcionalidad de gráficos de MigraDoces limitada en comparación con las bibliotecas de gráficos JavaScriptmodernas como Chart.js o D3.

Comparación entre MigraDoce IronPDF

Característica MigraDoc IronPDF
Definición del contenido Programática (Documento/Sección/Párrafo) HTML/CSS
Curva de aprendizaje Steep (DOM propietario) Fácil (conocimientos web)
Estilización Propiedades limitadas CSS3 completo
JavaScript Ninguno Ejecución completa de Chromium
Tablas Definición manual de columnas y filas HTML <código>`con CSS
Gráficos Gráficos básicos de MigraDoc Cualquier biblioteca de gráficos JavaScript
Imágenes Dimensionamiento/posicionamiento manual HTML estándar <img>
Diseños con capacidad de respuesta No soportado Flexbox, cuadrícula
Licencia Código abierto (MIT) Comercial

Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona una base preparada para el futuro que permite a los desarrolladores utilizar habilidades HTML/CSSconocidas en lugar de aprender un modelo de documento propietario.


Evaluación de la complejidad de la migración

Esfuerzo estimado por función

Característica Complejidad de la migración Notas
Texto sencillo Muy bajo Párrafo → Elementos HTML
Tablas Bajo Tabla/Fila/Celda → HTML <table>
Encabezados/pies de página Bajo Sección.Encabezados → RenderingOptions
Estilos Medio Propiedades de formato → Clases CSS
Imágenes Bajo AddImage → HTML <img>
Gráficos Medio Requiere biblioteca JavaScript

Cambio de paradigma

El cambio fundamental en esta migración de MigraDoces de la construcción programática de documentos a la representación HTML primero:

using IronPdf; MigraDoc: Documento → AñadirSección() → AñadirPárrafo() → PdfDocumentRenderer → Guardar() IronPDF: ChromePdfRenderer → RenderHtmlAsPdf(html) → Guardar como() using IronPdf;

Este cambio de paradigma reduce drásticamente la complejidad del código a la vez que proporciona capacidades ilimitadas de estilización mediante CSS.


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

using IronPdf;bash

Remove MigraDocpackages

dotnet remove package PdfSharp-MigraDoc dotnet remove package PdfSharp-MigraDoc-GDI dotnet remove package PDFsharp.MigraDoc.Standard

Install IronPDF

dotnet add package IronPdf using IronPdf;

Configuración de licencias

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

Identificar el uso de MigraDoc

using IronPdf;bash

Find all MigraDocreferences

grep -r "using MigraDoc|PdfDocumentRenderer|AddSection|AddParagraph" --include=".cs" . grep -r "AddTable|AddRow|AddColumn|AddCell|AddImage" --include=".cs" . using IronPdf;


Referencia completa de la API

Clases

`
Clase MigraDoc Equivalente de IronPDF Notas
Documento <código>ChromePdfRenderer` Utilizar renderizador, no documento
Sección HTML <body> o <div> Contenedor estructural
Párrafo HTML <p>, <h1>, etc. Elementos de texto
<código>Texto con formato| HTML,`, etc. Formato en línea
<código>Tabla` HTML <código> Con estilo CSS
Fila HTML <código>
Fila de tabla
Columna HTML <col> o CSS Estilo de las columnas
Célula HTML <td>, <th> Celda de tabla
<código>PdfDocumentRenderer` <código>ChromePdfRenderer Renderizador principal

Métodos

`
Método MigraDoc Equivalente de IronPDF Notas
document.AddSection() Estructura HTML Utilice <div> o <section>
<código>section.AddParagraph(text)` <código>

texto

Párrafo HTML
<código>section.AddTable() <código> Tabla HTML
table.AddColumn(width) Propiedad CSS width Estilo en <th> o <td>
table.AddRow() <código>
Fila HTML
row.Cells[n].AddParagraph() <td>content</td> Celda HTML
<código>renderer.RenderDocument()` <código>RenderHtmlAsPdf(html) Convertir a PDF
<código>pdfDocument.Save(path) <código>pdf.SaveAs(ruta) Guardar archivo

Mapeo de marcadores de posición (encabezados/pies de página)

Método MigraDoc Marcador de posición IronPDF Notas
<código>AddPageField() {page} Número de página actual
<código>AddNumPagesField()|{total de páginas}` Número total de páginas
<código>AddDateField()|{fecha}` Fecha actual

Ejemplos de migración de código

Ejemplo 1: HTML básico a PDF (La diferencia fundamental)

Antes (MigraDoc):

using IronPdf;csharp // NuGet: Install-Package PdfSharp-MigraDoc-GDI using MigraDoc.DocumentObjectModel; using MigraDoc.Rendering; using System.Diagnostics;

class Program { static void Main() { // MigraDocdoesn't support HTML directly // Must manually create document structure Document document = new Document(); Section section = document.AddSection();

    Paragraph paragraph = section.AddParagraph();
    paragraph.AddFormattedText("Hello World", TextFormat.Bold);
    paragraph.Format.Font.Size = 16;

    PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
    pdfRenderer.Document = document;
    pdfRenderer.RenderDocument();
    pdfRenderer.PdfDocument.Save("output.pdf");
}

} using IronPdf;

Después (IronPDF):

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

class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("

Hello World

"); pdf.SaveAs("output.pdf"); } } using IronPdf;

Este ejemplo ilustra la diferencia fundamental entre MigraDoce IronPDF. MigraDocrequiere crear un Documento, añadir una Sección, añadir un Párrafo, usar AddFormattedText() con TextFormat.Bold, estableciendo Format.Font.Size, creando un PdfDocumentRenderer, asignando el documento, llamando a RenderDocument(), y finalmente guardando. Son más de 10 líneas de código con varios objetos.

IronPDF consigue el mismo resultado en 3 líneas: crear un renderizador, renderizar HTML y guardar. La etiqueta HTML <h1> proporciona naturalmente el estilo de encabezado grande y en negrita. Consulte la documentación HTML a PDF para obtener más opciones de conversión.

Ejemplo 2: Creación de tablas

Antes (MigraDoc):

using IronPdf;csharp // NuGet: Install-Package PdfSharp-MigraDoc-GDI using MigraDoc.DocumentObjectModel; using MigraDoc.DocumentObjectModel.Tables; using MigraDoc.Rendering;

class Program { static void Main() { Document document = new Document(); Section section = document.AddSection();

    Table table = section.AddTable();
    table.Borders.Width = 0.75;

    Column column1 = table.AddColumn("3cm");
    Column column2 = table.AddColumn("3cm");

    Row row1 = table.AddRow();
    row1.Cells[0].AddParagraph("Name");
    row1.Cells[1].AddParagraph("Age");

    Row row2 = table.AddRow();
    row2.Cells[0].AddParagraph("John");
    row2.Cells[1].AddParagraph("30");

    PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();
    pdfRenderer.Document = document;
    pdfRenderer.RenderDocument();
    pdfRenderer.PdfDocument.Save("table.pdf");
}

} using IronPdf;

Después (IronPDF):

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

class Program { static void Main() { var renderer = new ChromePdfRenderer(); string htmlTable = @"

NameAge
John30
"; var pdf = renderer.RenderHtmlAsPdf(htmlTable); pdf.SaveAs("table.pdf"); } } using IronPdf; La creación de tablas MigraDocrequiere comprender la jerarquía `Table`, `Column`, `Fila`y `Cell`. Debe añadir columnas explícitamente con `AddColumn()`, crear filas con `AddRow()`, acceder a celdas por índice con `Cells[n]` y añadir contenido con `AddParagraph()`. El borde se establece mediante `table.Borders.Width`. IronPDF utiliza la sintaxis de tablas HTML estándar que conoce cualquier desarrollador web. El atributo `border='1'` proporciona el borde, los elementos `` crean celdas de encabezado y los elementos `` crean celdas de datos. Se puede añadir CSS para estilos avanzados como rayas de cebra, efectos hover o diseños adaptables. Más información sobre [creación de tablas en PDF](https://ironpdf.com/tutorials/). ### Ejemplo 3: Encabezados y pies de página con números de página **Antes (MigraDoc):** using IronPdf;csharp // NuGet: Install-Package PdfSharp-MigraDoc-GDI using MigraDoc.DocumentObjectModel; using MigraDoc.Rendering; class Program { static void Main() { Document document = new Document(); Section section = document.AddSection(); // Add header Paragraph headerPara = section.Headers.Primary.AddParagraph(); headerPara.AddText("Document Header"); headerPara.Format.Font.Size = 12; headerPara.Format.Alignment = ParagraphAlignment.Center; // Add footer Paragraph footerPara = section.Footers.Primary.AddParagraph(); footerPara.AddText("Page "); footerPara.AddPageField(); footerPara.Format.Alignment = ParagraphAlignment.Center; // Add content section.AddParagraph("Main content of the document"); PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(); pdfRenderer.Document = document; pdfRenderer.RenderDocument(); pdfRenderer.PdfDocument.Save("header-footer.pdf"); } } using IronPdf; **Después (IronPDF):** using IronPdf;csharp // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("

Main content of the document

"); pdf.AddTextHeader("Document Header"); pdf.AddTextFooter("Page {page}"); pdf.SaveAs("header-footer.pdf"); } } using IronPdf; Los encabezados y pies de página de MigraDocrequieren acceder a `section.Headers.Primary` y `section.Footers.Primary`, crear párrafos dentro de ellos, añadir texto con `AddText()` y utilizar métodos especiales como AddPageField()`para contenido dinámico. La alineación requiere la configuración de `Format.Alignment`. IronPDF proporciona los sencillos métodos `AddTextHeader()` y `AddTextFooter()` en el objeto `PdfDocument`. El marcador de posición `{page}`inserta automáticamente el número de la página actual. Para cabeceras más complejas, puede utilizar `HtmlHeaderFooter` con soporte completo HTML/CSS. Consulte la [documentación sobre encabezados y pies de página](https://ironpdf.com/how-to/headers-and-footers/) para conocer las opciones avanzadas. --- ## Notas de migración críticas ### Sintaxis del marcador de posición del número de página El cambio más importante en los encabezados y pies de página es la sintaxis de los marcadores de posición: using IronPdf;csharp // MigraDocfield methods: footerPara.AddPageField(); // Current page footerPara.AddNumPagesField(); // Total pages //IronPDFplaceholders: "Page {page} of {total-pages}" using IronPdf; ### Propiedades de formato a CSS Las propiedades `Format` de MigraDocse corresponden con CSS: using IronPdf;csharp // MigraDoc: paragraph.Format.Font.Size = 16; paragraph.Format.Font.Bold = true; paragraph.Format.Alignment = ParagraphAlignment.Center; //IronPDF(CSS):

using IronPdf; ### Conversión de unidades MigraDoc utiliza varias unidades; Los márgenes deIronPDFestán en milímetros: - "1 cm" = 10 mm - "1 pulgada = 25,4 mm - "72pt" = 25,4 mm using IronPdf;csharp // MigraDoc: table.AddColumn("3cm"); //IronPDF(CSS): using IronPdf; ### Cambio de patrón de renderizado Todo el patrón de renderizado cambia: using IronPdf;csharp // MigraDocpattern (DELETE): PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(); pdfRenderer.Document = document; pdfRenderer.RenderDocument(); pdfRenderer.PdfDocument.Save("output.pdf"); //IronPDFpattern: var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf"); using IronPdf; --- ## Solución de problemas ### Asunto 1: Documento/sección no encontrados **Problema:** Las clases `Documento`y `Sección`no existen en IronPDF. **Solución:** Reemplazar con la estructura HTML: using IronPdf;csharp // MigraDoc Document document = new Document(); Section section = document.AddSection(); // IronPDF string html = "..."; var pdf = renderer.RenderHtmlAsPdf(html); using IronPdf; ### Número 2: AddParagraph Not Found **Problema:** el método `AddParagraph()` no existe. **Solución:** utilizar elementos HTML: using IronPdf;csharp // MigraDoc section.AddParagraph("Hello World"); // IronPDF "

Hello World

" using IronPdf; ### Asunto 3: PdfDocumentRenderer no encontrado **Problema:** la clase PdfDocumentRenderer`no existe. **Solución:** utilice ChromePdfRenderer: using IronPdf;csharp // MigraDoc PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(); // IronPDF var renderer = new ChromePdfRenderer(); using IronPdf; ### Asunto 4: AddPageField no funciona **Problema:** el método AddPageField()no existe. **Solución:** utilice la sintaxis de marcador de posición IronPDF: using IronPdf;csharp // MigraDoc footerPara.AddPageField(); // IronPDF pdf.AddTextFooter("Page {page}"); using IronPdf; --- ## Lista de comprobación de la migración ### Pre-Migración - Identificar todos los MigraDoc`using` declaraciones - Estructuras de tablas de documentos (columnas, filas, estilo) - Tenga en cuenta el contenido del encabezado/pie de página y el uso de los campos de página - Lista de estilos personalizados definidos con `document.Styles` - Obtener la clave de licencia de IronPDF ### Cambios en el paquete - Eliminar el paquete `PdfSharp-MigraDoc` - Eliminar el paquete `PdfSharp-MigraDoc-GDI` - Instalar el paquete NuGet `IronPdf` : `dotnet add package IronPdf` - Actualizar las importaciones de espacios de nombres ### Cambios de código - Agregar configuración de clave de licencia al inicio - Reemplazar `Documento`/ `Sección`con estructura HTML - Convertir `AddParagraph()` a HTML`

` elementos - Convertir Tabla`/ `Fila`/ `Célula`a HTML`

` estructura - Reemplace AddPageField()`con el marcador de posición `{page}` - Reemplace AddNumPagesField()`con el marcador de posición `{total-pages}` - Convertir propiedades `Format` a estilos CSS - Reemplazar PdfDocumentRenderer`con `ChromePdfRenderer` ### Pruebas - Comparar la salida visual entre archivos PDF antiguos y nuevos - Verificar que los saltos de página funcionen correctamente - Verificar la representación del encabezado/pie de página y los números de página - Validar el formato y los bordes de la tabla - Prueba con documentos complejos de varias páginas ### Posmigración - Eliminar la documentación relacionada con MigraDoc - Actualizar los materiales de capacitación del equipo - Documentar nuevas ubicaciones de plantillas HTML ---
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