IRONSOFTWAREHOME
VIDEOS

Cómo guardar y editar el historial de revisiones de PDF en C#

Curtis Chau
Curtis Chau
Updated: 18 de mayo de 2026

La migración de MigraDoca IronPDF transforma 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. Debe construir manualmente los documentos elemento por elemento utilizando los objetos Document, Section, Paragraph y Table; no puede 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ísticaMigraDocIronPDF
Definición del contenidoProgramática (Documento/Sección/Párrafo)HTML/CSS
Curva de aprendizajeSteep (DOM propietario)Fácil (conocimientos web)
EstilizaciónPropiedades limitadasCSS3 completo
JavaScriptNingunoEjecución completa de Chromium
TablasDefinición manual de columnas y filasHTML <table> con CSS
GráficosGráficos básicos de MigraDocCualquier biblioteca de gráficos JavaScript
ImágenesDimensionamiento/posicionamiento manualHTML estándar <img>
Diseños con capacidad de respuestaNo soportadoFlexbox, cuadrícula
LicenciaCódigo abierto (MIT)Comercial

Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDF proporciona 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ísticaComplejidad de la migración
Texto sencilloMuy bajo
TablasBajo
Encabezados/pies de páginaBajo
EstilosMedio
ImágenesBajo
GráficosMedio

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:

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

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

Cambios en el paquete NuGet

# 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
SHELL

Configuración de licencias

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

Identificar el uso de MigraDoc

# Find all MigraDocreferences
grep -r "using MigraDoc\|PdfDocumentRenderer\|AddSection\|AddParagraph" --include="*.cs" .
grep -r "AddTable\|AddRow\|AddColumn\|AddCell\|AddImage" --include="*.cs" .
SHELL

Referencia completa de la API

Clases

Clase MigraDocEquivalente de IronPDF
DocumentChromePdfRenderer
SectionHTML <body> o <div>
ParagraphHTML <p>, <h1>, etc.
FormattedTextHTML <span>, <strong>, etc.
TableHTML <table>
RowHTML <tr>
ColumnHTML <col> o CSS
CellHTML <td>, <th>
PdfDocumentRendererChromePdfRenderer

Métodos

Método MigraDocEquivalente de IronPDF
document.AddSection()Estructura HTML
section.AddParagraph(text)<p>text</p>
section.AddTable()<table>
table.AddColumn(width)Propiedad CSS width
table.AddRow()<tr>
row.Cells[n].AddParagraph()<td>content</td>
renderer.RenderDocument()RenderHtmlAsPdf(html)
pdfDocument.Save(path)pdf.SaveAs(path)

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

Método MigraDocMarcador de posición IronPDF
AddPageField(){page}
AddNumPagesField(){total-pages}
AddDateField(){date}

Ejemplos de migración de código

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

Antes (MigraDoc):

// 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");
    }
}
C#

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
        pdf.SaveAs("output.pdf");
    }
}

Este ejemplo ilustra la diferencia fundamental entre MigraDoce IronPDF. MigraDocrequiere crear un Document, agregar un Section, agregar un Paragraph, usar AddFormattedText() con TextFormat.Bold, configurar Format.Font.Size, crear un PdfDocumentRenderer, asignar el documento, llamar a RenderDocument() y, finalmente, guardar. 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):

// 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");
    }
}

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string htmlTable = @"
            <table border='1'>
                <tr><th>Name</th><th>Age</th></tr>
                <tr><td>John</td><td>30</td></tr>
            </table>";
        
        var pdf = renderer.RenderHtmlAsPdf(htmlTable);
        pdf.SaveAs("table.pdf");
    }
}

La creación de la tabla MigraDocrequiere comprender la jerarquía Table, Column, Row y Cell. Debe agregar columnas explícitamente con AddColumn(), crear filas con AddRow(), acceder a celdas por índice con Cells[n] y agregar 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 <th> crean celdas de encabezado y los elementos <td> 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.

Ejemplo 3: Encabezados y pies de página con números de página

Antes (MigraDoc):

// 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");
    }
}

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Main content of the document</h1>");
        
        pdf.AddTextHeader("Document Header");
        pdf.AddTextFooter("Page {page}");
        
        pdf.SaveAs("header-footer.pdf");
    }
}

Los encabezados y pies de página de MigraDocrequieren acceder a section.Headers.Primary y section.Footers.Primary, crear párrafos dentro de ellos, agregar texto con AddText() y usar métodos especiales como AddPageField() para contenido dinámico. La alineación requiere la configuración Format.Alignment.

IronPDF proporciona métodos simples AddTextHeader() y AddTextFooter() en el objeto PdfDocument. El marcador de posición {page} inserta automáticamente el número de página actual. Para encabezados más complejos, puede utilizar HtmlHeaderFooter con soporte completo de HTML/CSS. Consulte la documentación sobre encabezados y pies de página 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:

// MigraDocfield methods:
footerPara.AddPageField();       // Current page
footerPara.AddNumPagesField();   // Total pages

//IronPDFplaceholders:
"Page {page} of {total-pages}"

Propiedades de formato a CSS

Las propiedades Format de MigraDocse asignan a CSS:

// MigraDoc:
paragraph.Format.Font.Size = 16;
paragraph.Format.Font.Bold = true;
paragraph.Format.Alignment = ParagraphAlignment.Center;

//IronPDF(CSS):
<p style="font-size: 16pt; font-weight: bold; text-align: center;">

Conversión de unidades

MigraDoc utiliza varias unidades; Los márgenes de IronPDF están en milímetros:

  • "1 cm" = 10 mm
  • "1 pulgada = 25,4 mm
  • "72pt" = 25,4 mm
// MigraDoc:
table.AddColumn("3cm");

//IronPDF(CSS):
<th style="width: 3cm;">

Cambio de patrón de renderizado

Todo el patrón de renderizado cambia:

// 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");

Solución de problemas

Asunto 1: Documento/sección no encontrados

Problema: las clases Document y Section no existen en IronPDF.

Solución: Reemplazar con la estructura HTML:

// MigraDoc
Document document = new Document();
Section section = document.AddSection();

// IronPDF
string html = "<html><body>...</body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);

Número 2: AddParagraph Not Found

Problema: el método AddParagraph() no existe.

Solución: utilizar elementos HTML:

// MigraDoc
section.AddParagraph("Hello World");

// IronPDF
"<p>Hello World</p>"

Asunto 3: PdfDocumentRenderer no encontrado

Problema: PdfDocumentRenderer la clase no existe.

Solución: Utilice ChromePdfRenderer:

// MigraDoc
PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer();

// IronPDF
var renderer = new ChromePdfRenderer();

Asunto 4: AddPageField no funciona

Problema: el método AddPageField() no existe.

Solución: utilice la sintaxis de marcador de posición IronPDF:

// MigraDoc
footerPara.AddPageField();

// IronPDF
pdf.AddTextFooter("Page {page}");

Lista de comprobación de la migración

Pre-Migración

  • Identificar todas las declaraciones MigraDocusing
  • 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 IronPdf el paquete NuGet : 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 Section con la estructura HTML
  • Convertir elementos AddParagraph() a HTML <p>
  • Convertir Cell a la estructura HTML <table>
  • 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
  • Reemplace 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 estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta