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

Cómo migrar de DynamicPDF a IronPDF en C#

Migrar de DynamicPDFa IronPDF: Guía completa de migración a C

DynamicPDF es una biblioteca PDF .NET establecida desde hace tiempo y conocida por su completo conjunto de funciones de generación, fusión y manipulación de PDF. Sin embargo, el modelo de producto fragmentado de DynamicPDF, que requiere licencias independientes para Generator, Merger, HTML Converter y otros componentes, crea complejidad y problemas de costes para los equipos de desarrollo. Esta completa guía proporciona una ruta de migración paso a paso de DynamicPDFa IronPDF, una biblioteca PDF .NET todo en uno que combina generación, manipulación y conversión HTML en un único paquete con un moderno renderizado basado en Chromium.

¿Por qué migrar de DynamicPDFa IronPDF?

La fragmentación del producto DynamicPDFrepresenta el principal motor de la migración. Comprender el modelo de licencias es esencial para evaluar el coste real de su implementación actual.

El problema de la fragmentación de productos

DynamicPDF se vende como productos separados con licencias separadas:

  1. Generador de PDF dinámico: Crea PDFs desde cero
  2. DynamicPDF Merger: Fusiona, divide y manipula PDF existentes (compra por separado)
  3. DynamicPDF Core Suite: Generador y fusionador combinados
  4. DynamicPDF ReportWriter: Generación de informes
  5. DynamicPDF HTML Converter: conversión de HTML a PDF (complemento independiente)
  6. Administrador de impresión de DynamicPDF: Imprime PDFs mediante programación

Una solución PDF completa requiere de 3 a 5 licencias independientes con DynamicPDF.IronPDFlo incluye todo en un solo paquete.

Comparación de arquitecturas

AspectoDynamicPDFIronPDF
Modelo de productoFragmentado (más de 5 productos)Biblioteca todo en uno
LicenciasSe requieren varias licenciasLicencia única
HTML a PDFCompra adicional por separadoIntegrado, basado en Chromium
Soporte CSSLimitado (requiere complemento)CSS3 completo con Flexbox/Grid
Estilo APIPosicionamiento basado en coordenadasHTML/CSS + API de manipulación
Curva de aprendizajeSteep (varias API)Suave (tecnologías web)
Moderno .NET.NET Standard 2.0.NET 6/7/8/9+ nativo

Beneficios clave de la migración

  1. Un solo paquete: Un paquete NuGet sustituye a 3-5 paquetes DynamicPDF
  2. Renderizado moderno: El motor Chromium frente al renderizado heredado
  3. Tecnologías web: Utilizar HTML/CSS en lugar de posicionamiento basado en coordenadas
  4. API más sencilla: Menos código, más legible, mantenimiento más sencillo
  5. Sin compras adicionales: HTML, fusión, seguridad todo incluido

Preparación de la migración

Prerrequisitos

Asegúrese de que su entorno cumple estos requisitos:

  • .NET Framework 4.6.2+ o .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ o VS Code con extensión de C#
  • Acceso al gestor de paquetes NuGet
  • Clave de licencia deIronPDF(prueba gratuita disponible en ironpdf.com)

Auditar el uso de DynamicPDF

Ejecute estos comandos en su directorio de soluciones para identificar todas las referencias a DynamicPDF:

# Find all DynamicPDFreferences
grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" .

# Check NuGet packages
dotnet list package | grep -i dynamic
# Find all DynamicPDFreferences
grep -r "ceTe.DynamicPDF\|DynamicPDF" --include="*.cs" --include="*.csproj" .

# Check NuGet packages
dotnet list package | grep -i dynamic
SHELL

Paquetes comunes a tener en cuenta:

  • ceTe.DynamicPDF.CoreSuite.NET
  • <código>ceTe.DynamicPDF.Generator.NET</código
  • <código>ceTe.DynamicPDF.Merger.NET</código
  • <código>ceTe.DynamicPDF.HtmlConverter.NET</código

Entendiendo el cambio de paradigma

El cambio más significativo al migrar de DynamicPDFaIronPDFes el enfoque fundamental de la creación de documentos. DynamicPDFutiliza un posicionamiento basado en coordenadas en el que los elementos se colocan en coordenadas X,Y específicas en una página.IronPDFutiliza renderizado HTML/CSS donde se diseña con tecnologías web.

Este cambio de paradigma implica convertir los elementos Etiqueta, Área de textoy <código>Tabla2</códigoen sus equivalentes HTML, un cambio que suele dar como resultado un código más legible y fácil de mantener.

Proceso de migración paso a paso

Paso 1: Actualizar paquetes NuGet

Elimine todos los paquetes de DynamicPDFe instale IronPDF:

# Remove DynamicPDFpackages
dotnet remove package ceTe.DynamicPDF.CoreSuite.NET
dotnet remove package ceTe.DynamicPDF.Generator.NET
dotnet remove package ceTe.DynamicPDF.Merger.NET
dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET

# Install IronPDF
dotnet add package IronPdf
# Remove DynamicPDFpackages
dotnet remove package ceTe.DynamicPDF.CoreSuite.NET
dotnet remove package ceTe.DynamicPDF.Generator.NET
dotnet remove package ceTe.DynamicPDF.Merger.NET
dotnet remove package ceTe.DynamicPDF.HtmlConverter.NET

# Install IronPDF
dotnet add package IronPdf
SHELL

Paso 2: Actualizar referencias de espacios de nombres

Sustituya los espacios de nombres DynamicPDFpor IronPDF:

// Remove these
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;
using ceTe.DynamicPDF.Conversion;

// Add this
using IronPdf;
// Remove these
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;
using ceTe.DynamicPDF.Conversion;

// Add this
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Paso 3: Configurar la licencia

// 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";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Referencia completa de migración de API

Mapeo de clases principales

Clase DynamicPDFEquivalente de IronPDFNotas
Documento<código>ChromePdfRenderer</códigoPara generar nuevos PDF
DocumentoDocumento PDFPara manipular PDF existentes
<código>Página</códigoHTML <div> con salto de páginaO varias versiones
<código>MergeDocument</códigoPdfDocument.Merge()Método de fusión estática
<código>HtmlConverter</código<código>ChromePdfRenderer</códigoIntegrado, sin complementos

Mapeo de elementos de página a HTML

DynamicPDFPageElementEquivalente IronPDF/HTML
Etiqueta<p>, <span>, <div>
Área de texto<div>, <p> con CSS
Imagen<código> related to Mapeo de elementos de página a HTML</código> etiqueta
<código>Tabla2</códigoHTML <código></código>
Etiqueta de numeración de páginas{page} / {total-pages} marcadores de posición

Claves de la API

DynamicPDFIronPDFNotas
Documento + Página<código>ChromePdfRenderer</códigoGeneración basada en HTML
Etiqueta, Área de textoHTML <p>, <div>Estilo con CSS
<código>Tabla2</códigoHTML <código></código>Estilo CSS completo
<código>MergeDocument</códigoPdfDocument.Merge()Método estático
<código>HtmlConverter</código<código>ChromePdfRenderer</códigoIntegrado, sin complementos
document.Draw()pdf.SaveAs() / pdf.BinaryData
Etiqueta de numeración de páginas``%%CP%%{page} marcador de posiciónSintaxis diferente

Ejemplos de migración de código

Conversión de HTML a PDF

La conversión de HTML a PDF demuestra la necesidad de DynamicPDFde un complemento <código>HtmlConverter</códigoindependiente frente al renderizado Chromium integrado de IronPDF.

Implementación de DynamicPDF:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Conversion;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        HtmlConverter converter = new HtmlConverter(html);
        converter.Convert("output.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Conversion;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        HtmlConverter converter = new HtmlConverter(html);
        converter.Convert("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Implementación de IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1></body></html>";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El <código>ChromePdfRenderer</códigodeIronPDFproporciona renderizado basado en Chromium con compatibilidad total con CSS3, sin necesidad de adquirir ningún complemento por separado. Para más opciones, consulte la documentación HTML a PDF.

Fusión de varios PDF

La fusión de PDF demuestra la diferencia entre la clase <código>MergeDocument</códigode DynamicPDF(que requiere la licencia del producto Merger) y el método estático incorporado Merge de IronPDF.

Implementación de DynamicPDF:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Merger;

class Program
{
    static void Main()
    {
        MergeDocument document = new MergeDocument("document1.pdf");
        document.Append("document2.pdf");
        document.Draw("merged.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Merger;

class Program
{
    static void Main()
    {
        MergeDocument document = new MergeDocument("document1.pdf");
        document.Append("document2.pdf");
        document.Draw("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Implementación de IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var pdf1 = PdfDocument.FromFile("document1.pdf");
        var pdf2 = PdfDocument.FromFile("document2.pdf");
        var merged = PdfDocument.Merge(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El método estático Merge deIronPDFacepta varios objetos Documento PDFdirectamente. Para más opciones, consulte la documentación sobre la fusión de PDF.

Añadir texto a PDF

La colocación del texto demuestra el cambio de paradigma de los elementos Etiquetabasados en coordenadas de DynamicPDFa TextStamper basado en HTML de IronPDF.

Implementación de DynamicPDF:

// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Page page = new Page(PageSize.Letter);
        Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100);
        page.Elements.Add(label);
        document.Pages.Add(page);
        document.Draw("output.pdf");
    }
}
// NuGet: Install-Package ceTe.DynamicPDF.CoreSuite.NET
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;

class Program
{
    static void Main()
    {
        Document document = new Document();
        Page page = new Page(PageSize.Letter);
        Label label = new Label("Hello from DynamicPDF!", 0, 0, 504, 100);
        page.Elements.Add(label);
        document.Pages.Add(page);
        document.Draw("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Implementación de IronPDF:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalAlignment = VerticalAlignment.Top
        };
        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
        var textStamper = new TextStamper()
        {
            Text = "Hello from IronPDF!",
            FontSize = 20,
            VerticalAlignment = VerticalAlignment.Top
        };
        pdf.ApplyStamp(textStamper);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El TextStamper deIronPDFproporciona un posicionamiento basado en la alineación en lugar de la colocación basada en coordenadas, lo que hace que los diseños sean más adaptables a diferentes tamaños de página. Para más opciones, consulte la documentación sobre marcas de agua y sellos.

Ejemplo completo de generación de documentos

Este completo ejemplo muestra la conversión de un documento DynamicPDFcon múltiples elementos al enfoque HTML de IronPDF.

Implementación de DynamicPDF:

using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;

// Generation (requires Generator license)
Document document = new Document();
Page page = new Page(PageSize.A4);
Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18);
title.Align = TextAlign.Center;
page.Elements.Add(title);

Table2 table = new Table2(40, 60, 515, 500);
// ... complex table setup with columns, rows, cells...
page.Elements.Add(table);
document.Pages.Add(page);
document.Draw("invoice.pdf");

// Merging (requires Merger license)
MergeDocument mergeDoc = new MergeDocument("cover.pdf");
mergeDoc.Append("invoice.pdf");
mergeDoc.Draw("final.pdf");
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.PageElements;
using ceTe.DynamicPDF.Merger;

// Generation (requires Generator license)
Document document = new Document();
Page page = new Page(PageSize.A4);
Label title = new Label("Invoice Report", 0, 0, 595, 30, Font.HelveticaBold, 18);
title.Align = TextAlign.Center;
page.Elements.Add(title);

Table2 table = new Table2(40, 60, 515, 500);
// ... complex table setup with columns, rows, cells...
page.Elements.Add(table);
document.Pages.Add(page);
document.Draw("invoice.pdf");

// Merging (requires Merger license)
MergeDocument mergeDoc = new MergeDocument("cover.pdf");
mergeDoc.Append("invoice.pdf");
mergeDoc.Draw("final.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Implementación de IronPDF:

using IronPdf;

var renderer = new ChromePdfRenderer();

// All features in one library
var html = @"
<html>
<head>
    <style>
        body { font-family: Helvetica, sans-serif; padding: 40px; }
        h1 { text-align: center; font-size: 18pt; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice Report</h1>
    <table>
        <tr><th>Product</th><th>Qty</th><th>Price</th></tr>
        <tr><td>Widget</td><td>10</td><td>$99.99</td></tr>
    </table>
</body>
</html>";

var invoice = renderer.RenderHtmlAsPdf(html);

// Merging included - no separate license
var cover = PdfDocument.FromFile("cover.pdf");
var final = PdfDocument.Merge(cover, invoice);
final.SaveAs("final.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// All features in one library
var html = @"
<html>
<head>
    <style>
        body { font-family: Helvetica, sans-serif; padding: 40px; }
        h1 { text-align: center; font-size: 18pt; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
    </style>
</head>
<body>
    <h1>Invoice Report</h1>
    <table>
        <tr><th>Product</th><th>Qty</th><th>Price</th></tr>
        <tr><td>Widget</td><td>10</td><td>$99.99</td></tr>
    </table>
</body>
</html>";

var invoice = renderer.RenderHtmlAsPdf(html);

// Merging included - no separate license
var cover = PdfDocument.FromFile("cover.pdf");
var final = PdfDocument.Merge(cover, invoice);
final.SaveAs("final.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Notas de migración críticas

Posicionamiento basado en coordenadas a HTML/CSS

El cambio de paradigma fundamental requiere convertir el posicionamiento por coordenadas X,Y a diseños basados en CSS:

// DynamicPDF- coordinate-based
var label = new Label("Hello World", 100, 200, 300, 50);

//IronPDF- CSS positioning (if absolute positioning needed)
var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>";

//IronPDF- preferred approach (flow-based)
var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>";
// DynamicPDF- coordinate-based
var label = new Label("Hello World", 100, 200, 300, 50);

//IronPDF- CSS positioning (if absolute positioning needed)
var html = "<div style='position:absolute; left:100px; top:200px; width:300px;'>Hello World</div>";

//IronPDF- preferred approach (flow-based)
var html = "<div style='margin-left:100px; margin-top:200px;'>Hello World</div>";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Sintaxis de numeración de páginas

DynamicPDF eIronPDFutilizan una sintaxis diferente para los números de página:

// DynamicPDFplaceholders
"Page %%CP%% of %%TP%%"

//IronPDFplaceholders
"Page {page} of {total-pages}"
// DynamicPDFplaceholders
"Page %%CP%% of %%TP%%"

//IronPDFplaceholders
"Page {page} of {total-pages}"
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Cabeceras y pies de página

Convertir elementos DynamicPDFTemplate aIronPDFHtmlHeaderFooter:

//IronPDFheader/footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
//IronPDFheader/footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = "<div style='text-align:center;'>Page {page} of {total-pages}</div>",
    MaxHeight = 25
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Para más opciones de encabezado/pie de página, consulte la documentación sobre encabezados y pies de página.

Configuración de seguridad

//IronPDFsecurity
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.UserPassword = "userPassword";
//IronPDFsecurity
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.UserPassword = "userPassword";
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Para conocer todas las opciones de seguridad, consulte la documentación sobre cifrado.

Lista de comprobación posterior a la migración

Después de completar la migración del código, verifique lo siguiente:

  • [ ] Comparación visual de los PDF generados
  • [ ] Verificación de la posición y el diseño del texto
  • [ ] Prueba de renderizado y desbordamiento de tablas
  • [ ] Verificar encabezados/pies de página en todas las páginas
  • [ ] Probar la funcionalidad de rellenado de formularios
  • [Verificar la seguridad/cifrado
  • [Evaluación comparativa del rendimiento
  • [ ] Eliminar archivos de licencia de DynamicPDFno utilizados
  • [ ] Actualización de la documentación

Proteja su infraestructura PDF

Con .NET 10 en el horizonte y C# 14 introduciendo nuevas características del lenguaje, elegir una biblioteca PDF que adopte los patrones modernos de .NET garantiza la compatibilidad a largo plazo. La compatibilidad nativa deIronPDFcon .NET 6/7/8/9+ proporciona un camino claro hacia adelante a medida que los proyectos se extienden hasta 2025 y 2026, sin la complejidad de gestionar varias licencias de productos o navegar por API fragmentadas.

Recursos adicionales


La migración de DynamicPDFaIronPDFelimina la complejidad de gestionar varias licencias de productos, a la vez que proporciona un moderno renderizado basado en Chromium y compatibilidad total con CSS3. La transición del posicionamiento basado en coordenadas al diseño HTML/CSS suele dar como resultado un código más fácil de mantener que aprovecha las tecnologías web conocidas.

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