Cómo migrar de Syncfusion PDF a IronPDF en C#
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Syncfusion PDF on pricing, HTML support, and licensing.
La migración de Syncfusion PDFFramework aIronPDFtransforma su flujo de trabajo de generación de PDF de una API de gráficos basada en coordenadas incluida en una gran suite a una biblioteca independiente basada en HTML/CSS con renderización moderna en Chromium. Esta guía proporciona una ruta de migración completa, paso a paso, que elimina las licencias exclusivas de suite, los complejos requisitos de despliegue y el posicionamiento basado en coordenadas.
Por qué migrar de Syncfusion PDFa IronPDF
Comprensión de Syncfusion PDFFramework
Syncfusion PDF Framework es una completa biblioteca que ofrece una amplia gama de funciones para crear, editar y proteger documentos PDF utilizando C#. Forma parte de Essential Studio de Syncfusion, que incluye más de mil componentes para múltiples plataformas.
Sin embargo, uno de sus inconvenientes más significativos es que no puede adquirirse como producto independiente; los desarrolladores deben comprar el paquete completo de componentes Syncfusion. Este requisito puede resultar engorroso para los equipos interesados únicamente en las funcionalidades de PDF, sobre todo porque este paquete podría incluir herramientas innecesarias para sus proyectos.
El problema de las licencias de paquetes
El modelo de licencias de Syncfusion plantea importantes retos a los equipos que solo necesitan la funcionalidad PDF:
- Compra solo de Suite: No se puede comprar la biblioteca PDF por separado; se debe comprar Essential Studio completo.
- Restricciones de la licencia comunitaria: el nivel gratuito requiere <$1 millón en ingresos y <5 desarrolladores
- Licencias de implementación complejas: diferentes licencias para implementaciones web, de escritorio y de servidor
- Renovación anual requerida: Modelo de suscripción con costos anuales
- Precios por desarrollador: los costos se escalan linealmente con el tamaño del equipo.
- Suite Bloat: incluye más de 1000 componentes que quizás no necesites
Comparación entre Syncfusion PDFe IronPDF
| Aspecto | Syncfusion PDF | IronPDF |
|---|---|---|
| Modelo de compra | Sólo paquete Suite | Independiente |
| Licencias | Niveles complejos | Simple por desarrollador |
| Límite de la comunidad | <$1M AND <5 devs | Prueba gratuita, luego licencia |
| Despliegue | Múltiples tipos de licencia | Una licencia cubre todos |
| Estilo API | Gráficos basados en coordenadas | HTML/CSS primero |
| Soporte HTML | Requiere BlinkBinaries | Cromo nativo |
| Soporte CSS | Limitado | CSS3/flexbox/grid completo |
| Dependencias | Múltiples paquetes | NuGet único |
| Requisitos de la suite | Sí (conjunto completo) | No |
| Enfoque en PDF | Amplio; parte de un paquete más amplio | Estrecha; Enfocado a PDF |
IronPDF ofrece un enfoque más centrado al ofrecer sus funciones PDF como producto independiente. Esta diferencia afecta significativamente tanto a los costes como a la facilidad de integración.
Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026, la licencia independiente y el enfoque HTML/CSS primerodeIronPDFproporcionan flexibilidad sin dependencias de la suite.
Antes de empezar
Prerrequisitos
- Entorno .NET : .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acceso a NuGet : Capacidad para instalar paquetes NuGet
- Licencia deIronPDF: Obtenga su clave de licencia en IronPDF
Cambios en el paquete NuGet
# Remove Syncfusion packages
dotnet remove package Syncfusion.Pdf.Net.Core
dotnet remove package Syncfusion.HtmlToPdfConverter.Net.Windows
dotnet remove package Syncfusion.Licensing
# Install IronPDF
dotnet add package IronPdf
# Remove Syncfusion packages
dotnet remove package Syncfusion.Pdf.Net.Core
dotnet remove package Syncfusion.HtmlToPdfConverter.Net.Windows
dotnet remove package Syncfusion.Licensing
# Install IronPDF
dotnet add package IronPdf
Configuración de licencias
Syncfusion:
// Must register before any Syncfusion calls
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-SYNCFUSION-KEY");
// Must register before any Syncfusion calls
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-SYNCFUSION-KEY");
' Must register before any Syncfusion calls
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-SYNCFUSION-KEY")
IronPDF:
// One-time at startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-KEY";
// One-time at startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-KEY";
' One-time at startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-KEY"
Referencia completa de la API
Cambios en el espacio de nombres
// Before: Syncfusion PDF
using Syncfusion.Pdf;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Pdf.Parsing;
using Syncfusion.HtmlConverter;
using Syncfusion.Drawing;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: Syncfusion PDF
using Syncfusion.Pdf;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Pdf.Parsing;
using Syncfusion.HtmlConverter;
using Syncfusion.Drawing;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
Mapeos de API principales
| Syncfusion | IronPDF |
|---|---|
PdfDocument |
ChromePdfRenderer |
PdfLoadedDocument |
PdfDocument.FromFile() |
HtmlToPdfConverter |
ChromePdfRenderer |
graphics.DrawString() |
Elementos de texto HTML |
graphics.DrawImage() |
Etiqueta <img> |
PdfGrid |
HTML <table> |
PdfStandardFont |
CSS font-family |
PdfBrushes.Black |
CSS color: black |
document.Security |
pdf.SecuritySettings |
PdfTextExtractor |
pdf.ExtractAllText() |
ImportPageRange() |
PdfDocument.Merge() |
document.Save(stream) |
pdf.SaveAs(path) |
document.Close(true) |
No es necesario |
Ejemplos de migración de código
Ejemplo 1: Conversión de HTML/URL a PDF
Antes (Syncfusion PDF):
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.HtmlConverter;
using Syncfusion.Pdf;
using System.IO;
class Program
{
static void Main()
{
// Initialize HTML to PDF converter
HtmlToPdfConverter htmlConverter = new HtmlToPdfConverter();
// Convert URL to PDF
PdfDocument document = htmlConverter.Convert("https://www.example.com");
// Save the document
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
}
}
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.HtmlConverter;
using Syncfusion.Pdf;
using System.IO;
class Program
{
static void Main()
{
// Initialize HTML to PDF converter
HtmlToPdfConverter htmlConverter = new HtmlToPdfConverter();
// Convert URL to PDF
PdfDocument document = htmlConverter.Convert("https://www.example.com");
// Save the document
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
}
}
Imports Syncfusion.HtmlConverter
Imports Syncfusion.Pdf
Imports System.IO
Module Program
Sub Main()
' Initialize HTML to PDF converter
Dim htmlConverter As New HtmlToPdfConverter()
' Convert URL to PDF
Dim document As PdfDocument = htmlConverter.Convert("https://www.example.com")
' Save the document
Dim fileStream As New FileStream("Output.pdf", FileMode.Create)
document.Save(fileStream)
document.Close(True)
fileStream.Close()
End Sub
End Module
Después (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
// Create a PDF from a URL
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
// Save the PDF
pdf.SaveAs("Output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
// Create a PDF from a URL
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
// Save the PDF
pdf.SaveAs("Output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
' Create a PDF from a URL
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
' Save the PDF
pdf.SaveAs("Output.pdf")
End Sub
End Class
Este ejemplo muestra las diferencias fundamentales entre las API. Syncfusion PDFrequiere una instancia HtmlToPdfConverter, llamar a Convert() que devuelve un PdfDocument, luego crear manualmente un FileStream, guardar y cerrar tanto el documento como la secuencia.
IronPDF utiliza un ChromePdfRenderer con RenderUrlAsPdf() en solo tres líneas de código. Sin administración de FileStream, sin llamadas a Close():IronPDFmaneja la limpieza automáticamente. Consulte la documentación HTML a PDF para ver ejemplos completos.
Ejemplo 2: Creación de PDF a partir de texto
Antes (Syncfusion PDF):
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.Pdf;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Drawing;
using System.IO;
class Program
{
static void Main()
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
// Add a page
PdfPage page = document.Pages.Add();
// Create a font
PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 12);
// Draw text
page.Graphics.DrawString("Hello, World!", font, PdfBrushes.Black, new PointF(10, 10));
// Save the document
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
}
}
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.Pdf;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Drawing;
using System.IO;
class Program
{
static void Main()
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
// Add a page
PdfPage page = document.Pages.Add();
// Create a font
PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 12);
// Draw text
page.Graphics.DrawString("Hello, World!", font, PdfBrushes.Black, new PointF(10, 10));
// Save the document
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
}
}
Imports Syncfusion.Pdf
Imports Syncfusion.Pdf.Graphics
Imports Syncfusion.Drawing
Imports System.IO
Module Program
Sub Main()
' Create a new PDF document
Dim document As New PdfDocument()
' Add a page
Dim page As PdfPage = document.Pages.Add()
' Create a font
Dim font As PdfFont = New PdfStandardFont(PdfFontFamily.Helvetica, 12)
' Draw text
page.Graphics.DrawString("Hello, World!", font, PdfBrushes.Black, New PointF(10, 10))
' Save the document
Dim fileStream As New FileStream("Output.pdf", FileMode.Create)
document.Save(fileStream)
document.Close(True)
fileStream.Close()
End Sub
End Module
Después (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
// Save the document
pdf.SaveAs("Output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
// Save the document
pdf.SaveAs("Output.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
' Create a PDF from HTML string
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>")
' Save the document
pdf.SaveAs("Output.pdf")
End Sub
End Class
Syncfusion PDF utiliza un modelo gráfico basado en coordenadas. Crea un PdfDocument, agrega un PdfPage, crea un PdfFont con PdfFontFamily.Helvetica, luego llama a page.Graphics.DrawString() con coordenadas explícitas (new PointF(10, 10)), fuente y pincel (PdfBrushes.Black). Finalmente, administra la creación y eliminación de FileStream.
IronPDF utiliza un enfoque basado en HTML/CSS. Instead of coordinates, you write <h1>Hello, World!</h1> and let CSS handle positioning, fonts, and colors. Este enfoque es más sencillo, más fácil de mantener y aprovecha los conocimientos que ya tienen los desarrolladores. Más información en nuestros tutoriales.
Ejemplo 3: Fusión de documentos PDF
Antes (Syncfusion PDF):
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.Pdf;
using Syncfusion.Pdf.Parsing;
using System.IO;
class Program
{
static void Main()
{
// Load the first PDF document
FileStream stream1 = new FileStream("Document1.pdf", FileMode.Open, FileAccess.Read);
PdfLoadedDocument loadedDocument1 = new PdfLoadedDocument(stream1);
// Load the second PDF document
FileStream stream2 = new FileStream("Document2.pdf", FileMode.Open, FileAccess.Read);
PdfLoadedDocument loadedDocument2 = new PdfLoadedDocument(stream2);
// Merge the documents
PdfDocument finalDocument = new PdfDocument();
finalDocument.ImportPageRange(loadedDocument1, 0, loadedDocument1.Pages.Count - 1);
finalDocument.ImportPageRange(loadedDocument2, 0, loadedDocument2.Pages.Count - 1);
// Save the merged document
FileStream outputStream = new FileStream("Merged.pdf", FileMode.Create);
finalDocument.Save(outputStream);
// Close all documents
finalDocument.Close(true);
loadedDocument1.Close(true);
loadedDocument2.Close(true);
stream1.Close();
stream2.Close();
outputStream.Close();
}
}
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.Pdf;
using Syncfusion.Pdf.Parsing;
using System.IO;
class Program
{
static void Main()
{
// Load the first PDF document
FileStream stream1 = new FileStream("Document1.pdf", FileMode.Open, FileAccess.Read);
PdfLoadedDocument loadedDocument1 = new PdfLoadedDocument(stream1);
// Load the second PDF document
FileStream stream2 = new FileStream("Document2.pdf", FileMode.Open, FileAccess.Read);
PdfLoadedDocument loadedDocument2 = new PdfLoadedDocument(stream2);
// Merge the documents
PdfDocument finalDocument = new PdfDocument();
finalDocument.ImportPageRange(loadedDocument1, 0, loadedDocument1.Pages.Count - 1);
finalDocument.ImportPageRange(loadedDocument2, 0, loadedDocument2.Pages.Count - 1);
// Save the merged document
FileStream outputStream = new FileStream("Merged.pdf", FileMode.Create);
finalDocument.Save(outputStream);
// Close all documents
finalDocument.Close(true);
loadedDocument1.Close(true);
loadedDocument2.Close(true);
stream1.Close();
stream2.Close();
outputStream.Close();
}
}
Imports Syncfusion.Pdf
Imports Syncfusion.Pdf.Parsing
Imports System.IO
Class Program
Shared Sub Main()
' Load the first PDF document
Dim stream1 As New FileStream("Document1.pdf", FileMode.Open, FileAccess.Read)
Dim loadedDocument1 As New PdfLoadedDocument(stream1)
' Load the second PDF document
Dim stream2 As New FileStream("Document2.pdf", FileMode.Open, FileAccess.Read)
Dim loadedDocument2 As New PdfLoadedDocument(stream2)
' Merge the documents
Dim finalDocument As New PdfDocument()
finalDocument.ImportPageRange(loadedDocument1, 0, loadedDocument1.Pages.Count - 1)
finalDocument.ImportPageRange(loadedDocument2, 0, loadedDocument2.Pages.Count - 1)
' Save the merged document
Dim outputStream As New FileStream("Merged.pdf", FileMode.Create)
finalDocument.Save(outputStream)
' Close all documents
finalDocument.Close(True)
loadedDocument1.Close(True)
loadedDocument2.Close(True)
stream1.Close()
stream2.Close()
outputStream.Close()
End Sub
End Class
Después (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Load PDF documents
var pdf1 = PdfDocument.FromFile("Document1.pdf");
var pdf2 = PdfDocument.FromFile("Document2.pdf");
// Merge PDFs
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
// Save the merged document
merged.SaveAs("Merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Load PDF documents
var pdf1 = PdfDocument.FromFile("Document1.pdf");
var pdf2 = PdfDocument.FromFile("Document2.pdf");
// Merge PDFs
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
// Save the merged document
merged.SaveAs("Merged.pdf");
}
}
Imports IronPdf
Imports System.Collections.Generic
Class Program
Shared Sub Main()
' Load PDF documents
Dim pdf1 = PdfDocument.FromFile("Document1.pdf")
Dim pdf2 = PdfDocument.FromFile("Document2.pdf")
' Merge PDFs
Dim merged = PdfDocument.Merge(New List(Of PdfDocument) From {pdf1, pdf2})
' Save the merged document
merged.SaveAs("Merged.pdf")
End Sub
End Class
El contraste en la fusión de PDF es espectacular. Syncfusion PDFrequiere crear objetos FileStream para cada documento de entrada, cargarlos como PdfLoadedDocument, crear un nuevo PdfDocument, llamar a ImportPageRange() con índices de inicio y fin para cada origen, crear una salida FileStream y luego cerrar seis objetos separados (finalDocument, loadedDocument1, loadedDocument2, stream1, stream2, outputStream).
IronPDF utiliza PdfDocument.FromFile() para cargar cada PDF y un método estático PdfDocument.Merge() que acepta una lista de documentos. Sin gestión de flujos, sin cálculos manuales de rango de páginas, sin aproximaciones.
Diferencias clave en la filosofía de las API
Basado en coordenadas frente a HTML/CSS primero
Syncfusion PDF utiliza un modelo gráfico basado en coordenadas heredado de las bibliotecas PDF tradicionales:
// Syncfusion: Manualpositioning
page.Graphics.DrawString("Text", font, PdfBrushes.Black, new PointF(100, 200));
page.Graphics.DrawRectangle(brush, new RectangleF(50, 50, 200, 100));
// Syncfusion: Manualpositioning
page.Graphics.DrawString("Text", font, PdfBrushes.Black, new PointF(100, 200));
page.Graphics.DrawRectangle(brush, new RectangleF(50, 50, 200, 100));
' Syncfusion: Manualpositioning
page.Graphics.DrawString("Text", font, PdfBrushes.Black, New PointF(100, 200))
page.Graphics.DrawRectangle(brush, New RectangleF(50, 50, 200, 100))
IronPDF utiliza HTML/CSS para la maquetación:
// IronPDF: CSS-based positioning
var html = @"
<div style='margin: 50px; padding: 20px; border: 1px solid black;'>
<p style='color: black;'>Text</p>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: CSS-based positioning
var html = @"
<div style='margin: 50px; padding: 20px; border: 1px solid black;'>
<p style='color: black;'>Text</p>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
' IronPDF: CSS-based positioning
Dim html As String = "
<div style='margin: 50px; padding: 20px; border: 1px solid black;'>
<p style='color: black;'>Text</p>
</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
El enfoque HTML/CSS es más intuitivo para los desarrolladores web, más fácil de mantener y produce resultados coherentes en diferentes tamaños de página.
Gestión de flujos frente a limpieza automática
Syncfusion PDF requiere un flujo explícito y la eliminación de documentos:
// Syncfusion: Manualcleanup
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
// Syncfusion: Manualcleanup
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
' Syncfusion: Manualcleanup
Dim fileStream As New FileStream("Output.pdf", FileMode.Create)
document.Save(fileStream)
document.Close(True)
fileStream.Close()
IronPDF se encarga de la limpieza automáticamente:
// IronPDF: Automáticocleanup
pdf.SaveAs("Output.pdf");
// IronPDF: Automáticocleanup
pdf.SaveAs("Output.pdf");
' IronPDF: Automáticocleanup
pdf.SaveAs("Output.pdf")
Comparación de características
| Característica | Syncfusion PDF | IronPDF |
|---|---|---|
| Compra de Stalone | No (sólo suite) | Sí |
| Licencias | Comercial con restricciones comunitarias | Comercial simplificado |
| HTML a PDF | Requiere BlinkBinaries | Cromo nativo |
| Soporte CSS3 | Limitado | Completo (flexbox, grid) |
| Estilo API | Gráficos basados en coordenadas | HTML/CSS primero |
| Gestión de flujos | Manual | Automático |
| Dependencias | Múltiples paquetes | NuGet único |
| Complejidad de Implementación | Potencialmente complejo | Sencillo |
Lista de comprobación de la migración
Pre-Migración
- Inventariar todos los usos de PDF de Syncfusion en el código base
- Documentar los costos de licencia y los requisitos de implementación
- Identificar los usos de
PdfGrid,PdfGraphicsyHtmlToPdfConverter - Obtenga la clave de licencia deIronPDFen IronPDF
Actualizaciones de código
- Eliminar paquetes de Syncfusion (
Syncfusion.Pdf.Net.Core,Syncfusion.HtmlToPdfConverter.Net.Windows,Syncfusion.Licensing) - Instalar el paquete NuGet
IronPdf - Actualizar las importaciones del espacio de nombres (
using Syncfusion.Pdf;→using IronPdf;) - Reemplace
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense()conIronPdf.License.LicenseKey = "..." - Reemplace
HtmlToPdfConverter.Convert()conChromePdfRenderer.RenderUrlAsPdf()oRenderHtmlAsPdf() - Reemplazar
PdfDocument+Pages.Add()+Graphics.DrawString()conChromePdfRenderer.RenderHtmlAsPdf() - Reemplace
PdfLoadedDocumentconPdfDocument.FromFile() - Reemplace
ImportPageRange()conPdfDocument.Merge() - Reemplace
document.Save(stream)conpdf.SaveAs(path) - Eliminar todas las llamadas
document.Close(true)ystream.Close() - Reemplazar
PdfGridcon elementos HTML<table> - Reemplace
PdfStandardFontcon CSSfont-family - Reemplace
PdfBrushescon las propiedades CSScolor
Pruebas
- Comparación visual de la salida PDF
- Verificar las mejoras de representación CSS (flexbox y grid ahora funcionan)
- Prueba de extracción de texto
- Prueba de fusión y división
- Comparación de rendimiento

