Cómo migrar de DynamicPDF a IronPDF en C#
¿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:
- Generador DynamicPDF: Crea archivos PDF desde cero
- DynamicPDF Merger: fusiona, divide y manipula archivos PDF existentes (compra por separado)
- DynamicPDF Core Suite: Generador y fusión combinados
- DynamicPDF ReportWriter: Generación de informes
- DynamicPDF HTML Converter: Conversión de HTML a PDF (complemento independiente)
- DynamicPDF Print Manager: Imprima archivos PDF 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
| Aspecto | DynamicPDF | IronPDF |
|---|---|---|
| Modelo de producto | Fragmentado (más de 5 productos) | Biblioteca todo en uno |
| Licencias | Se requieren varias licencias | Licencia única |
| HTML a PDF | Compra adicional por separado | Integrado, basado en Chromium |
| Soporte CSS | Limitado (requiere complemento) | CSS3 completo con Flexbox/Grid |
| Estilo API | Posicionamiento basado en coordenadas | HTML/CSS + API de manipulación |
| Curva de aprendizaje | Steep (varias API) | Suave (tecnologías web) |
| Moderno .NET | .NET Standard 2.0 | .NET 6/7/8/9+ nativo |
Beneficios clave de la migración
- Paquete único: un paquete NuGet reemplaza de 3 a 5 paquetes DynamicPDF
- Renderizado moderno: motor Chromium versus renderizado tradicional
- Tecnologías web: utilice HTML/CSS en lugar de posicionamiento basado en coordenadas
- API más sencilla: menos código, más legible, mantenimiento más sencillo
- Sin compras adicionales: HTML, fusión y 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 dynamicPaquetes 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 IronPdfPaso 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;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";Referencia completa de migración de API
Mapeo de clases principales
| Clase DynamicPDF | Equivalente de IronPDF | Notas |
|---|---|---|
Documento | <código>ChromePdfRenderer</código | Para generar nuevos PDF |
Documento | Documento PDF | Para manipular PDF existentes |
| <código>Página</código | HTML <div> con salto de página | O varias versiones |
| <código>MergeDocument</código | PdfDocument.Merge() | Método de fusión estática |
| <código>HtmlConverter</código | <código>ChromePdfRenderer</código | Integrado, sin complementos |
Mapeo de elementos de página a HTML
| DynamicPDFPageElement | Equivalente IronPDF/HTML |
|---|---|
Etiqueta | <p>, <span>, <div> |
Área de texto | <div>, <p> con CSS |
Imagen | <código> |
| <código>Tabla2</código | HTML <código> |
Etiqueta de numeración de páginas | {page} / {total-pages} marcadores de posición |
Claves de la API
| DynamicPDF | IronPDF | Notas |
|---|---|---|
Documento + Página | <código>ChromePdfRenderer</código | Generación basada en HTML |
Etiqueta, Área de texto | HTML <p>, <div> | Estilo con CSS |
| <código>Tabla2</código | HTML <código> | Estilo CSS completo |
| <código>MergeDocument</código | PdfDocument.Merge() | Método estático |
| <código>HtmlConverter</código | <código>ChromePdfRenderer</código | Integrado, sin complementos |
document.Draw() | pdf.SaveAs() / pdf.BinaryData | |
Etiqueta de numeración de páginas``%%CP%% | {page} marcador de posición | Sintaxis 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");
}
}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");
}
}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");
}
}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");
}
}El método estático Merge deIronPDFacepta varios objetos Documento PDFdirectamente. Para obtener más opciones, consulte la documentación de 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");
}
}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");
}
}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");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");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>";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}"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
};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";Para conocer opciones de seguridad integrales, consulte la documentación de 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
- Verificar la posición y el diseño del texto
- Probar la representación y el desbordamiento de la tabla
- Verificar encabezados y pies de página en todas las páginas
- Pruebe la funcionalidad de llenado de formularios
- Verificar 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.






