Cómo migrar de Spire.PDF a IronPDF en C#
Migrar de Spire.PDF a IronPDF: Guía completa de migración de C
La migración de Spire.PDF aIronPDFtransforma su flujo de trabajo de generación de PDF de una biblioteca que renderiza texto como imágenes a una que produce texto verdadero, seleccionable y con capacidad de búsqueda utilizando un moderno motor de renderizado Chromium. Esta guía proporciona una ruta de migración completa, paso a paso, que resuelve las limitaciones críticas de renderizado HTML y los problemas de incrustación de fuentes de Spire.PDF.
Por qué migrar de Spire.PDF a IronPDF
Entendiendo Spire.PDF
Spire.PDF es una robusta biblioteca PDF comercial diseñada para que los desarrolladores .NET manejen documentos PDF de forma eficiente. Spire.PDF se ha hecho un hueco en la comunidad de programadores por sus capacidades específicas, especialmente en aplicaciones heredadas, y sus capacidades de integración se alinean a la perfección con otros componentes del conjunto de herramientas E-iceblue.
Sin embargo, Spire.PDF tiene varios problemas fundamentales que afectan a su uso en el mundo real, en particular en torno a la conversión de HTML a PDF y la compatibilidad con los estándares web modernos.
Cuestiones técnicas críticas
| Problema | Impacto | Solución IronPDF |
|---|---|---|
| Texto renderizado como imágenes | Los PDF no permiten búsquedas, no son accesibles, no se puede copiar el texto | Representación de texto real |
| Dependencia de Internet Explorer | Renderizado obsoleto, riesgos de seguridad | Motor Chromium moderno |
| Fallos de incrustación de fuentes | Los documentos se ven mal en otros sistemas | Manejo fiable de fuentes |
| Gran despliegue | Uso elevado de memoria, inicio lento | Despliegue eficaz |
| Soporte CSS limitado | Los diseños modernos no se muestran correctamente | Compatibilidad total con CSS3 |
El problema principal: los PDF basados en imágenes
Un inconveniente importante de Spire.PDF es que tiende a mostrar el texto de los documentos HTML como imágenes. El resultado son PDF en los que el texto no se puede seleccionar ni buscar, lo que puede suponer una grave limitación para las aplicaciones que necesitan funciones de búsqueda o interacción con el texto del documento.
Cuando se utiliza el método LoadFromHTML() de Spire.PDF, a menudo renderiza el texto como imágenes de mapa de bits en lugar de texto real, creando estos problemas:
- Texto NO seleccionable
- El texto NO puede buscarse
- El texto NO puede copiarse
- Los lectores de pantalla NO PUEDEN leerlo (violación de la accesibilidad)
- El tamaño del archivo es MUCHO mayor
- El zoom provoca pixelación
Comparación entre Spire.PDF e IronPDF
| Característica | Spire.PDF | IronPDF |
|---|---|---|
| Traducción de HTML a PDF | Texto renderizado como imágenes | Representación de texto real (seleccionable y con posibilidad de búsqueda) |
| Motor de renderizado | Internet Explorer depende de algunos sistemas | Basado en Chromium, compatible con los estándares web modernos |
| Manejo de fuentes | Problemas conocidos con la incrustación de fuentes | Manejo de fuentes fiable y sólido |
| Soporte CSS3 | Limitado | Completo |
| Flexbox/Grid | No soportado | Soporte completo |
| JavaScript | Limitado | ES6+ completo |
| Accesibilidad de PDF | Pobre (basado en imágenes) | Excelente |
| Diseño de API | Complejo | Sencillo e intuitivo |
| Huella de despliegue | Sitio web de gran tamaño | Moderado |
| Licencias | Freemium/Comercial | Comercial |
Para los equipos que planean la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFresuelve los problemas críticos de la conversión de HTML a PDF de Spire.PDF al representar el texto como texto seleccionable real en lugar de imágenes, lo que garantiza que los PDF se puedan buscar y sean accesibles.
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 IronPDF: Obtenga su clave de licencia en ironpdf.com
Cambios en el paquete NuGet
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# Install IronPDF
dotnet add package IronPdf# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# Install IronPDF
dotnet add package IronPdfConfiguración de licencias
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.comReferencia completa de la API
Cambios en el espacio de nombres
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;IRON VB CONVERTER ERROR developers@ironsoftware.comCore API Mappings
| Spire.PDF | IronPDF | Notas |
|---|---|---|
nuevo PdfDocument() | <código>new ChromePdfRenderer()</código | Para la renderización HTML |
| <código>pdf.LoadFromHTML()</código | renderer.RenderHtmlAsPdf() | Conversión de HTML |
| <código>pdf.LoadFromFile()</código | <código>PdfDocument.FromFile()</código | Cargar PDF existente |
| <código>pdf.SaveToFile()</código | <código>pdf.SaveAs()</código | Guardar en archivo |
| <código>pdf.Close()</código | No es necesario | Utiliza el patrón dispose |
| <código>pdf.Pages.Add()</código> | renderer.RenderHtmlAsPdf() | Crear página a partir de HTML |
| <código>pdf.InsertPageRange()</código | PdfDocument.Merge() | Fusionar PDF |
| <código>page.Canvas.DrawString()</código> | TextStamper + ApplyStamp() | Añadir texto |
| <código>PdfFont</código | Estilización CSS en HTML | Configuración de fuentes |
| <código>PdfBrush</código | Estilización CSS en HTML | Configuración de color/relleno |
Ejemplos de migración de código
Ejemplo 1: Conversión de HTML a PDF
Antes (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEste ejemplo demuestra la diferencia fundamental en la representación de HTML. Spire.PDF utiliza LoadFromHTML() con un objeto PdfHtmlLayoutFormat, que a menudo representa el texto como imágenes de mapa de bits. El resultado son PDF en los que los usuarios no pueden seleccionar, copiar o buscar texto.
IronPDF utiliza un ChromePdfRenderer con RenderHtmlAsPdf(), produciendo texto verdadero que es totalmente seleccionable, consultable y accesible. No se requiere ninguna llamada a Close():IronPDFutiliza el patrón dispose para la limpieza automática. Consulte la documentación de HTML a PDF para ver ejemplos completos.
Ejemplo 2: Fusión de varios PDF
Antes (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
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;
using System;
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.comSpire.PDF requiere cargar manualmente cada documento con nuevo PdfDocument()+ LoadFromFile(), luego usar InsertPageRange() para especificar qué páginas insertar, y finalmente llamar a Close() en cada documento.
IronPDF utiliza el patrón más sencillo <código>PdfDocument.FromFile()</códigoy un método estático PdfDocument.Merge()que acepta múltiples documentos. No se necesitan llamadas a Close(). Más información en nuestros tutoriales.
Ejemplo 3: Añadir texto a un PDF
Antes (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
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,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
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,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comSpire.PDF utiliza un modelo de dibujo basado en lienzo con PdfFont, PdfBrush, y <código>page.Canvas.DrawString()</código>para posicionar texto en coordenadas específicas utilizando PointF.
IronPDF utiliza un objeto TextStamper con propiedades intuitivas como Text, FontSize, VerticalOffset y HorizontalOffset, y luego lo aplica con ApplyStamp(). Este enfoque es más declarativo y fácil de mantener.
El problema del texto como imagen
Por qué es tan importante
Cuando Spire.PDF convierte HTML a PDF utilizando renderización basada en imágenes, sus documentos pierden funcionalidad esencial:
1. Sin búsqueda de texto: Los usuarios no pueden usar Ctrl+F para buscar texto. Los sistemas de gestión de documentos no pueden indexar el contenido.
2. Sin Selección/Copia de Texto: Los usuarios que intentan copiar una cita, referencia o datos no pueden seleccionar texto: es una imagen.
3. Vulneraciones de la accesibilidad: Los PDF basados en imágenes incumplen la normativa WCAG 2.1, la Sección 508 (Gobierno de EE.UU.), los requisitos de la ADA y la compatibilidad con lectores de pantalla.
4. Archivos de gran tamaño: La misma comparación de contenidos muestra que Spire.PDF (basado en imágenes) produce archivos hasta 16 veces más grandes queIronPDF(basado en texto).
Detección: ¿Su PDF está basado en imágenes?
Abra el documento generado con Spire.PDF y realice estas pruebas:
- Selección de texto: Haz clic y arrastra sobre el texto. Si no hay nada que destaque → IMAGE-BASED
- Ctrl+F Buscar: Busca cualquier palabra en la página. Si "No se han encontrado coincidencias" → IMAGE-BASED
- Copiar/Pegar: Seleccionar y copiar texto en el bloc de notas. Si no pega nada → BASE DE IMAGEN
El problema de Internet Explorer
Motor de renderizado de Spire.PDF
Spire.PDF depende de Internet Explorer/Edge Legacy para la representación HTML en algunos entornos. IE quedó obsoleto en 2022, el CSS moderno no funciona, la compatibilidad con JavaScript es limitada y la representación es incoherente entre sistemas.
CSS moderno que falla en Spire.PDF
<!-- This HTML renders incorrectly in Spire.PDF -->
<div style="display: flex; justify-content: space-between; gap: 20px;">
<div style="flex: 1;">Column 1</div>
<div style="flex: 1;">Column 2</div>
</div>
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<!-- CSS Variables don't work -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style><!-- This HTML renders incorrectly in Spire.PDF -->
<div style="display: flex; justify-content: space-between; gap: 20px;">
<div style="flex: 1;">Column 1</div>
<div style="flex: 1;">Column 2</div>
</div>
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<!-- CSS Variables don't work -->
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>IronPDF utiliza el moderno renderizado Chromium, por lo que todas estas características CSS funcionan correctamente.
Nuevas capacidades tras la migración
Tras migrar a IronPDF, obtendrá funciones que Spire.PDF no puede ofrecer:
Texto seleccionable y buscable
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");
// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clearvar renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");
// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clearIRON VB CONVERTER ERROR developers@ironsoftware.comSoporte CSS moderno
var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!IRON VB CONVERTER ERROR developers@ironsoftware.comMarcas de agua basadas en HTML
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>");var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>");IRON VB CONVERTER ERROR developers@ironsoftware.comLista de comprobación de la migración
Pre-Migración
- [ ] Inventario de todos los usos de Spire.PDF en el código base
- [ ] Comprobar la capacidad de selección de texto de los PDF existentes (detección de problemas críticos)
- [ ] Llamadas al documento
LoadFromHTML()(estas son las prioritarias para corregir) - [ ] Obtenga la clave de licencia deIronPDFen ironpdf.com
Actualizaciones de código
- [ ] Eliminar el paquete NuGet
Spire.PDF(yFreeSpire.PDFsi se utiliza la versión gratuita) - [ ] Instalar
IronPdfpaquete NuGet - [ ] Actualizar las importaciones de espacios de nombres (
using Spire.Pdf;→using IronPDF;) - [ ] Sustituir
LoadFromHTML()porRenderHtmlAsPdf()(CORRECCIÓN CRÍTICA) - [ ] Sustituya
nuevo PdfDocument()+LoadFromFile()porPdfDocument.FromFile() - [ ] Sustituya
InsertPageRange()porPdfDocument.Merge() - [ ] Sustituya
Canvas.DrawString()porTextStamper+ApplyStamp() - [Reemplace
SaveToFile()porSaveAs() - [ ] Eliminar todas las llamadas
Close()(no necesarias en IronPDF) - [ ] Añadir inicialización de licencia al inicio de la aplicación
Pruebas
- [ ] Comprobar que el texto se puede seleccionar en los PDF generados (PRUEBA CRÍTICA)
- [ ] Verificar las mejoras de renderizado CSS (Flexbox/Grid ahora funcionan)
- [ ] Comprobar que el tamaño de los archivos es menor
- [ ] Prueba de accesibilidad con lectores de pantalla
- [Comparación de rendimiento
Conclusión
Aunque Spire.PDF ofrece un conjunto de funcionalidades pertinentes para los desarrolladores atrincherados en aplicaciones heredadas y operaciones basadas en suites, sus limitaciones en la representación de texto, la dependencia de motores de representación obsoletos y los problemas de manejo de fuentes son consideraciones importantes.IronPDFdestaca como una alternativa competitiva, demostrando capacidades superiores de conversión de HTML a PDF a través de sus modernas técnicas de renderizado y un sólido manejo del texto.
Los cambios clave en esta migración son:
- Representación del texto: Basado en imágenes (no seleccionable) → Texto verdadero (seleccionable, buscable)
- Motor de renderizado: dependiente de Internet Explorer → Modern Chromium
- Soporte CSS: Limitada → CSS3 completa (Flexbox, cuadrícula, variables CSS)
- Conversión HTML: <código>pdf.LoadFromHTML()</código→
renderer.RenderHtmlAsPdf() - Cargar PDF existente:
nuevo PdfDocument()+LoadFromFile()→PdfDocument.FromFile() - Fusionar PDF:
InsertPageRange()→PdfDocument.Merge() - Añadir texto:
Canvas.DrawString()conPdfFont/PdfBrush→TextStamper+ApplyStamp() - Guardar:
SaveToFile()→SaveAs() - Cleanup:
Close()necesario → No necesario (patrón dispose) - Tamaño del archivo: Grande (basado en imágenes) → Compacto (PDF auténtico)
- Accesibilidad: Pobre → Excelente
A la hora de seleccionar una biblioteca PDF, es fundamental adaptar la elección a las exigencias específicas del proyecto en cuestión, teniendo en cuenta factores como la fidelidad del documento, la capacidad de búsqueda y la compatibilidad con la web moderna. Al comprender esta dinámica, los desarrolladores pueden tomar decisiones informadas que optimicen el manejo de los documentos y la experiencia del usuario.
Explore la documentación completa de IronPDF, tutoriales y referencia de API para acelerar su migración a Spire.PDF.






