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:
- Generador de PDF dinámico: Crea PDFs desde cero
- DynamicPDF Merger: Fusiona, divide y manipula PDF existentes (compra por separado)
- DynamicPDF Core Suite: Generador y fusionador combinados
- DynamicPDF ReportWriter: Generación de informes
- DynamicPDF HTML Converter: conversión de HTML a PDF (complemento independiente)
- 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
| 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
- Un solo paquete: Un paquete NuGet sustituye a 3-5 paquetes DynamicPDF
- Renderizado moderno: El motor Chromium frente al renderizado heredado
- Tecnologías web: Utilizar 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, 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;IRON VB CONVERTER ERROR developers@ironsoftware.comPaso 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.comReferencia 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");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comImplementació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.comEl <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.comImplementació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.comEl 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.comImplementació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.comEl 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.comImplementació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.comNotas 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.comSintaxis 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.comCabeceras 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.comPara 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.comPara 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.






