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

Cómo migrar de XFINIUM.PDF a IronPDF en C#

Migración de XFINIUM.PDF a IronPDF: Una guía completa para desarrolladores de C

XFINIUM.PDF es una biblioteca PDF multiplataforma que ofrece herramientas completas para crear y editar archivos PDF mediante programación en C#. Aunque ofrece dos ediciones -Generator y Viewer-, la dependencia de la biblioteca de la programación gráfica basada en coordenadas crea retos significativos para los equipos de desarrollo que crean aplicaciones con muchos documentos. Cada elemento debe colocarse manualmente mediante coordenadas de píxeles, lo que convierte lo que deberían ser documentos sencillos en complejos ejercicios de dibujo.

Esta guía proporciona una ruta de migración completa de XFINIUM.PDF a IronPDF, con instrucciones paso a paso, comparaciones de código y ejemplos prácticos para desarrolladores profesionales de .NET que estén evaluando esta transición.

Por qué migrar de XFINIUM.PDF

XFINIUM.PDF es una biblioteca PDF de bajo nivel que se basa en la programación de gráficos por coordenadas, lo que obliga a los desarrolladores a colocar manualmente cada elemento en la página. Este enfoque se convierte en una pesadilla de mantenimiento a medida que cambian los requisitos. Entre las principales razones por las que los equipos de desarrollo se plantean la migración se incluyen:

Sin soporte HTML: XFINIUM.PDF no puede convertir HTML/CSS a PDF directamente. Se centra en la creación programática de PDF mediante primitivas de dibujo de bajo nivel, que pueden no ser suficientes para proyectos que requieren amplias capacidades de HTML a PDF.

API basada en coordenadas: El posicionamiento manual con coordenadas de píxeles como DrawString("text", font, brush, 50, 100) es necesario para cada elemento de la página.

Gestión manual de fuentes: Los objetos de fuentes deben crearse y gestionarse explícitamente mediante clases como <código>PdfStandardFont</códigoy PdfBrush.

Sin estilo CSS: No es compatible con el estilo web moderno. Los colores, las fuentes y los diseños deben manejarse manualmente mediante llamadas a métodos programáticos.

Sin renderizado JavaScript: Sólo contenido estático. XFINIUM.PDF no puede mostrar contenido web dinámico ni ejecutar JavaScript.

Diseño de texto complejo: La medición manual del texto y los cálculos de ajuste son necesarios para todo lo que vaya más allá del texto simple de una sola línea.

Recursos limitados de la comunidad: En comparación con las soluciones convencionales, hay una falta de recursos proporcionados por la comunidad, como ejemplos y tutoriales, lo que puede dificultar la iniciación de los nuevos usuarios.

El problema central: API gráfica frente a HTML

XFINIUM.PDF le obliga a pensar como un programador gráfico, no como un diseñador de documentos:

// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, 50, 50);
page.Graphics.DrawString("Customer:", labelFont, brush, 50, 80);
page.Graphics.DrawString(customer.Name, valueFont, brush, 120, 80);
// ... hundreds of lines for a simple document
// XFINIUM.PDF: Position every element manually
page.Graphics.DrawString("Invoice", titleFont, titleBrush, 50, 50);
page.Graphics.DrawString("Customer:", labelFont, brush, 50, 80);
page.Graphics.DrawString(customer.Name, valueFont, brush, 120, 80);
// ... hundreds of lines for a simple document
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDF utiliza HTML/CSS conocidos:

// IronPDF: Declarative HTML
var html = @"<h1>Invoice</h1><p><b>Customer:</b> " + customer.Name + "</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
// IronPDF: Declarative HTML
var html = @"<h1>Invoice</h1><p><b>Customer:</b> " + customer.Name + "</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronPDFfrente a XFINIUM.PDF: Comparación de características

Comprender las diferencias arquitectónicas ayuda a los responsables técnicos a evaluar la inversión en migración:

CaracterísticaXFINIUM.PDFIronPDF
HTML a PDFCompatibilidad limitada con HTML, se centra en la creación programática de PDFConversión completa de HTML a PDF con soporte integral
Comunidad y soporteComunidad más pequeña, menos recursos en línea disponiblesAmplia comunidad con extensa documentación y tutoriales
LicenciaComercial con licencia para desarrolladoresComercial
Soporte multiplataformaGran capacidad multiplataformaTambién es compatible con operaciones multiplataforma
Soporte CSSNoCSS3 completo
JavaScriptNoES2024 completo
Flexbox/GridNo
Diseño automáticoNo
Saltos de página automáticosNo
Posicionamiento manualRequeridoOpcional (posicionamiento CSS)
Curva de aprendizajeAlto (sistema de coordenadas)Bajo (HTML/CSS)
Verbosidad del códigoMuy altoBajo

Inicio rápido: Migración de XFINIUM.PDF a IronPDF

La migración puede comenzar inmediatamente con estos pasos básicos.

Paso 1: Sustituir el paquete NuGet

Eliminar XFINIUM.PDF:

# Remove XFINIUM.PDF
dotnet remove package Xfinium.Pdf
# Remove XFINIUM.PDF
dotnet remove package Xfinium.Pdf
SHELL

Instalar IronPDF:

# Install IronPDF
dotnet add package IronPdf
# Install IronPDF
dotnet add package IronPdf
SHELL

Paso 2: Actualizar los espacios de nombres

Sustituya los espacios de nombres XFINIUM.PDF por el espacio de nombres IronPdf:

// Before (XFINIUM.PDF)
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Content;
using Xfinium.Pdf.FlowDocument;

// After (IronPDF)
using IronPdf;
// Before (XFINIUM.PDF)
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Content;
using Xfinium.Pdf.FlowDocument;

// After (IronPDF)
using IronPdf;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Paso 3: Inicializar licencia

Añadir inicialización de licencia al inicio de la aplicación:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Ejemplos de migración de código

Convertir HTML a PDF

La operación más fundamental revela la diferencia de complejidad entre estas bibliotecas PDF .NET.

Enfoque XFINIUM.PDF:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfFlowDocument flowDocument = new PdfFlowDocument();

        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        PdfFlowContent content = new PdfFlowContent();
        content.AppendHtml(html);
        flowDocument.AddContent(content);

        flowDocument.RenderDocument(document);
        document.Save("output.pdf");
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Actions;
using Xfinium.Pdf.FlowDocument;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfFlowDocument flowDocument = new PdfFlowDocument();

        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        PdfFlowContent content = new PdfFlowContent();
        content.AppendHtml(html);
        flowDocument.AddContent(content);

        flowDocument.RenderDocument(document);
        document.Save("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Enfoque IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

XFINIUM.PDF requiere crear un PdfFixedDocument, un PdfFlowDocument, un objeto PdfFlowContent, llamar a AppendHtml(), añadir contenido al documento de flujo, renderizar al documento fijo y, por último, guardar.IronPDFlo simplifica a tres líneas: crear un renderizador, renderizar HTML y guardar.

Para situaciones avanzadas de conversión de HTML a PDF, consulte la Guía de conversión de HTML a PDF.

Fusión de varios PDF

La fusión de PDF demuestra claramente las diferencias de complejidad de las API.

Enfoque XFINIUM.PDF:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument output = new PdfFixedDocument();

        FileStream file1 = File.OpenRead("document1.pdf");
        PdfFixedDocument pdf1 = new PdfFixedDocument(file1);

        FileStream file2 = File.OpenRead("document2.pdf");
        PdfFixedDocument pdf2 = new PdfFixedDocument(file2);

        for (int i = 0; i < pdf1.Pages.Count; i++)
        {
            output.Pages.Add(pdf1.Pages[i]);
        }

        for (int i = 0; i < pdf2.Pages.Count; i++)
        {
            output.Pages.Add(pdf2.Pages[i]);
        }

        output.Save("merged.pdf");

        file1.Close();
        file2.Close();
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument output = new PdfFixedDocument();

        FileStream file1 = File.OpenRead("document1.pdf");
        PdfFixedDocument pdf1 = new PdfFixedDocument(file1);

        FileStream file2 = File.OpenRead("document2.pdf");
        PdfFixedDocument pdf2 = new PdfFixedDocument(file2);

        for (int i = 0; i < pdf1.Pages.Count; i++)
        {
            output.Pages.Add(pdf1.Pages[i]);
        }

        for (int i = 0; i < pdf2.Pages.Count; i++)
        {
            output.Pages.Add(pdf2.Pages[i]);
        }

        output.Save("merged.pdf");

        file1.Close();
        file2.Close();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Enfoque IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;

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.Collections.Generic;

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

XFINIUM.PDF requiere crear un documento de salida, abrir flujos de archivos, cargar cada documento, iterar manualmente por las páginas y añadirlas una a una, guardar y, a continuación, cerrar los flujos.IronPDFproporciona un único método PdfDocument.Merge() que maneja toda la complejidad internamente.

Explore la documentación sobre la fusión de PDF para conocer otras opciones de fusión.

Creación de PDF con texto e imágenes

Los documentos de contenido mixto muestran la diferencia fundamental de paradigma.

Enfoque XFINIUM.PDF:

// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfPage page = document.Pages.Add();

        PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
        PdfBrush brush = new PdfBrush(PdfRgbColor.Black);

        page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);

        FileStream imageStream = File.OpenRead("image.jpg");
        PdfJpegImage image = new PdfJpegImage(imageStream);
        page.Graphics.DrawImage(image, 50, 100, 200, 150);
        imageStream.Close();

        document.Save("output.pdf");
    }
}
// NuGet: Install-Package Xfinium.Pdf
using Xfinium.Pdf;
using Xfinium.Pdf.Graphics;
using Xfinium.Pdf.Core;
using System.IO;

class Program
{
    static void Main()
    {
        PdfFixedDocument document = new PdfFixedDocument();
        PdfPage page = document.Pages.Add();

        PdfStandardFont font = new PdfStandardFont(PdfStandardFontFace.Helvetica, 24);
        PdfBrush brush = new PdfBrush(PdfRgbColor.Black);

        page.Graphics.DrawString("Sample PDF Document", font, brush, 50, 50);

        FileStream imageStream = File.OpenRead("image.jpg");
        PdfJpegImage image = new PdfJpegImage(imageStream);
        page.Graphics.DrawImage(image, 50, 100, 200, 150);
        imageStream.Close();

        document.Save("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Enfoque IronPDF:

// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
        string html = $@"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
                </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        string imageBase64 = Convert.ToBase64String(File.ReadAllBytes("image.jpg"));
        string html = $@"
            <html>
                <body>
                    <h1>Sample PDF Document</h1>
                    <img src='data:image/jpeg;base64,{imageBase64}' width='200' height='150' />
                </body>
            </html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

XFINIUM.PDF requiere crear un documento, añadir una página, crear objetos de fuente y pincel, dibujar texto en coordenadas específicas, abrir un flujo de imagen, crear un PdfJpegImage, dibujar la imagen en coordenadas con dimensiones, cerrar el flujo y guardar.IronPDFutiliza HTML estándar con imágenes base64 incrustadas, el mismo enfoque que utilizan a diario los desarrolladores web.

Referencia de la API XFINIUM.PDF a IronPDF

Este mapeo acelera la migración al mostrar los equivalentes directos de las API:

XFINIUM.PDFIronPDFNotas
DocumentoFijoPdf<código>ChromePdfRenderer</códigoCrear renderizador, no documento
Página PDFAutomáticoPáginas creadas a partir de contenido HTML
<código>page.Graphics.DrawString()</código>Elementos de texto HTML<p>, <h1>, <span>, etc.
<código>page.Graphics.DrawImage()</código<código> related to Referencia de la API XFINIUM.PDF a IronPDF</código> etiquetaImágenes HTML
<código>page.Graphics.DrawLine()</códigoCSS border o <hr>Líneas HTML/CSS
<código>page.Graphics.DrawRectangle()</códigoCSS border en <div>Cuadros HTML
<código>PdfStandardFont</códigoCSS familyNo se necesitan objetos de fuente
<código>PdfRgbColor</códigoCSS colorColores CSS estándar
<código>PdfBrush</códigoPropiedades CSSFondo, color, etc.
<código>PdfJpegImage</códigoetiqueta <img> con base64O ruta del archivo
<código>document.Save(stream)</códigopdf.SaveAs() o pdf.BinaryDataMúltiples opciones de salida
Documento PDFFlow<código>RenderHtmlAsPdf()</códigoCompatibilidad total con HTML
<código>PdfFlowContent.AppendHtml()</código<código>RenderHtmlAsPdf()</códigoRepresentación directa en HTML

Problemas comunes de migración y soluciones

Número 1: Diseño basado en coordenadas

XFINIUM.PDF: Todo requiere coordenadas X,Y exactas con posicionamiento manual.

Solución: Utilizar diseño de flujo HTML/CSS. Para el posicionamiento absoluto cuando sea necesario, utilice CSS:

.positioned-element {
    position: absolute;
    top: 100px;
    left: 50px;
}

Número 2: Gestión de objetos de fuentes

XFINIUM.PDF: Crea objetos <código>PdfStandardFont</códigoo PdfUnicodeTrueTypeFont para cada fuente.

Solución: Utilizar CSS font-family-las fuentes se manejan automáticamente:

<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style>
<style>
    body { font-family: Arial, sans-serif; }
    h1 { font-family: 'Times New Roman', serif; font-size: 24px; }
</style>
HTML

Número 3: Manejo del color

XFINIUM.PDF: Crea objetos <código>PdfRgbColor</códigoy <código>PdfBrush</códigopara colores.

Solución: Utilizar colores CSS estándar:

.header { color: navy; background-color: #f5f5f5; }
.warning { color: rgb(255, 0, 0); }
.info { color: rgba(0, 0, 255, 0.8); }

Edición 4: Saltos de página manuales

XFINIUM.PDF: Rastrea la posición Y y crea nuevas páginas manualmente cuando el contenido se desborde.

Solución:IronPDFgestiona los saltos de página automáticos. Para un control explícito, utilice CSS:

.section { page-break-after: always; }
.keep-together { page-break-inside: avoid; }

Número 5: Carga de imágenes

XFINIUM.PDF: Abrir secuencias de archivos, crear objetos PdfJpegImage, dibujar en coordenadas, cerrar secuencias.

Solución: Utilizar etiquetas HTML <img> con rutas de archivo o datos base64:

<img src="image.jpg" width="200" height="150" />
<!-- or -->
<img src="data:image/jpeg;base64,..." />
<img src="image.jpg" width="200" height="150" />
<!-- or -->
<img src="data:image/jpeg;base64,..." />
HTML

Lista de comprobación de la migración a XFINIUM.PDF

Tareas previas a la migración

Audite su código base para identificar todo el uso de XFINIUM.PDF:

grep -r "using Xfinium.Pdf" --include="*.cs" .
grep -r "Graphics.DrawString\|Graphics.DrawImage\|Graphics.DrawLine" --include="*.cs" .
grep -r "using Xfinium.Pdf" --include="*.cs" .
grep -r "Graphics.DrawString\|Graphics.DrawImage\|Graphics.DrawLine" --include="*.cs" .
SHELL

Documente los diseños basados en coordenadas y anote todos los valores de posicionamiento X,Y. Identificar los objetos de fuente y color (PdfStandardFont, PdfRgbColor, PdfBrush). Asigne flujos de trabajo PDF fusionados mediante PdfFixedDocument.Pages.Add().

Tareas de actualización de código

  1. Eliminar el paquete NuGet Xfinium.Pdf
  2. Instalación del paquete IronPdf NuGet
  3. Actualizar las importaciones de espacios de nombres de Xfinium.Pdf a IronPdf
  4. Convertir llamadas DrawString() en elementos de texto HTML
  5. Convertir las llamadas a DrawImage() en etiquetas HTML <img>
  6. Convertir DrawRectangle() y DrawLine() en bordes CSS
  7. Sustituye <código>PdfStandardFont</códigopor CSS font-family
  8. Sustituir <código>PdfRgbColor</códigoy <código>PdfBrush</códigopor colores CSS
  9. Sustituir la fusión de bucles de página por PdfDocument.Merge()
  10. Añadir la inicialización de la licenciaIronPDFal inicio

Pruebas posteriores a la migración

Tras la migración, verifique estos aspectos:

  • Comparar los resultados visuales para garantizar que el aspecto coincida con las expectativas
  • Verificar la representación del texto con el nuevo enfoque HTML/CSS
  • Comprobar el posicionamiento de imágenes mediante CSS
  • Los saltos de página de prueba se producen como se espera
  • Verificar que la configuración de seguridad del PDF se aplica correctamente
  • Prueba en todas las plataformas de destino

Beneficios clave de migrar a IronPDF

El cambio de XFINIUM.PDF aIronPDFofrece varias ventajas fundamentales:

Creación de contenidos basada en HTML: Los desarrolladores web pueden aprovechar sus conocimientos de HTML y CSS. No es necesario aprender API de dibujo basadas en coordenadas ni gestionar objetos de fuentes y pinceles.

Diseño automático: El ajuste de texto, la paginación y el diseño de flujo se realizan automáticamente. No es necesario calcular manualmente la posición de los elementos ni los saltos de página.

Soporte CSS moderno: CSS3 completo, incluidos los diseños Flexbox y Grid. Los diseños responsivos se traducen directamente a PDF.

Operaciones PDF simplificadas: Las llamadas a un solo método para operaciones comunes como PdfDocument.Merge() sustituyen a los complejos bucles de iteración de páginas.

Desarrollo Activo: A medida que aumenta la adopción de .NET 10 y C# 14 hasta 2026, las actualizaciones periódicas deIronPDFgarantizan la compatibilidad con las versiones actuales y futuras de .NET.

Documentación exhaustiva: Gran comunidad con documentación exhaustiva, tutoriales y recursos de soporte en comparación con el ecosistema más pequeño de XFINIUM.PDF.

Conclusión

XFINIUM.PDF proporciona herramientas completas de manipulación de PDF con sólidas capacidades multiplataforma. Sin embargo, su enfoque de programación gráfica basada en coordenadas crea una complejidad innecesaria para las tareas de generación de documentos. Cada elemento requiere posicionamiento manual, creación de objetos de fuente y gestión explícita del color.

IronPDF transforma la generación de PDF de un ejercicio de programación gráfica a un desarrollo HTML/CSS familiar. La ruta de migración es sencilla: sustituir los paquetes NuGet, convertir los comandos de dibujo en elementos HTML y aprovechar CSS para el estilo y el diseño.

Comience su migración hoy mismo con una prueba gratuita de IronPDF y experimente la sencillez de la generación de documentos basada en HTML.

Para una guía de implementación completa, explore la documentación de IronPDF y tutoriales.

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