IRONSOFTWAREHOME
VIDEOS

Cómo transformar páginas PDF utilizando IronPDF en C# | IronPDF

Curtis Chau
Curtis Chau
Updated: 19 de julio de 2026

Para los ISVs y equipos de desarrollo .NET en España, la migración de XFINIUM.PDF a IronPDF tiene una dimensión regulatoria crítica. XFINIUM.PDF usa programación gráfica basada en coordenadas y carece de soporte HTML/CSS, lo que le impide generar la leyenda obligatoria VERI\*FACTU exigida por el Real Decreto-Ley 15/2025 (VeriFactu), el QR verificable ante la AEAT, ni documentos Facturae XML en PDF/A-3 para FACe. Las sanciones para proveedores de software de facturación no conformes alcanzan 150.000 €/año.

TicketBAI —obligatorio en Bizkaia, Gipuzkoa y Araba— requiere firma XAdES conforme a eIDAS con certificados FNMT-RCM y generación de QR específico por provincia. La Ley Crea y Crece exige Facturae XML incrustado en PDF/A-3 para facturación B2B desde 2027-2028, bajo el estándar EN 16931 y el perfil CIUS-ES. El procesamiento on-premise de IronPDF facilita el cumplimiento del LOPDGDD supervisado por la AEPD sin transferir datos personales a terceros. Para grandes empresas bajo el SII (Suministro Inmediato de Información) de la AEAT, la generación asíncrona nativa de IronPDF permite transmisión paralela PDF + XML.

XFINIUM.PDF es una biblioteca PDF multiplataforma con capacidades de creación y edición para C#, pero su dependencia del paradigma de dibujo basado en coordenadas crea retos significativos en documentos con contenido HTML dinámico. 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 el contexto regulatorio español.

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: se requiere posicionamiento manual con coordenadas de píxeles como DrawString("text", font, brush, 50, 100) para cada elemento de la página.

Gestión manual de fuentes: los objetos de fuente deben crearse y gestionarse explícitamente utilizando clases como PdfStandardFont y PdfBrush.

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

Sin representación de JavaScript : solo contenido estático. XFINIUM.PDF no puede mostrar contenido web dinámico ni ejecutar JavaScript.

Diseño de texto complejo: se requieren mediciones de texto manuales y cálculos de ajuste para cualquier cosa que vaya más allá de un texto de una sola línea.

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

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

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 frente 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
SHELL

Instalar 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;

Paso 3: Inicializar licencia

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

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

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");
    }
}

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");
    }
}

XFINIUM.PDF requiere crear un objeto PdfFixedDocument, un PdfFlowDocument, un PdfFlowContent, llamar a AppendHtml(), agregar contenido al documento de flujo, renderizar al documento fijo y finalmente guardar.IronPDF lo 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();
    }
}

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");
    }
}

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.IronPDF proporciona 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");
    }
}

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");
    }
}

XFINIUM.PDF requiere crear un documento, agregar una página, crear objetos de fuente y pincel, dibujar texto en coordenadas específicas, abrir un flujo de imágenes, crear un PdfJpegImage, dibujar la imagen en coordenadas con dimensiones, cerrar el flujo y guardar.IronPDF utiliza 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.PDFIronPDF
PdfFixedDocumentChromePdfRenderer
PdfPageAutomático
page.Graphics.DrawString()Elementos de texto HTML
page.Graphics.DrawImage()Etiqueta <img>
page.Graphics.DrawLine()CSS border o <hr>
page.Graphics.DrawRectangle()CSS border en <div>
PdfStandardFontCSS font-family
PdfRgbColorCSS color
PdfBrushPropiedades CSS
PdfJpegImageEtiqueta <img> con base64
document.Save(stream)pdf.SaveAs() o pdf.BinaryData
PdfFlowDocumentRenderHtmlAsPdf()
PdfFlowContent.AppendHtml()RenderHtmlAsPdf()

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;
}
Text

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

XFINIUM.PDF: Crea objetos PdfStandardFont o 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>
HTML

Número 3: Manejo del color

XFINIUM.PDF: Crea objetos PdfRgbColor y PdfBrush para 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); }
Text

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:**IronPDF gestiona 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; }
Text

Número 5: Carga de imágenes

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

Solución: utilice 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,..." />
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" .
SHELL

Documente los diseños basados en coordenadas y anote todos los valores de posicionamiento X,Y. Identificar objetos de fuente y color (PdfStandardFont, PdfRgbColor, PdfBrush). Mapa de flujos de trabajo de PDF fusionados usando 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 las llamadas DrawString() en elementos de texto HTML
  5. Convertir las llamadas DrawImage() a etiquetas HTML <img>
  6. Convierta DrawRectangle() y DrawLine() en bordes CSS
  7. Reemplace PdfStandardFont con CSS font-family
  8. Reemplace PdfRgbColor y PdfBrush con colores CSS
  9. Reemplace la fusión de bucles de página con PdfDocument.Merge()
  10. Añadir la inicialización de la licencia IronPDF al 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 a IronPDF ofrece varias ventajas fundamentales:

Creación de contenido basado en HTML: los desarrolladores web pueden aprovechar las habilidades existentes en 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.

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

Operaciones PDF simplificadas: las llamadas de método único para operaciones comunes como PdfDocument.Merge() reemplazan bucles de iteración de páginas complejos.

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

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


Contexto regulatorio español: API de coordenadas y flujos VeriFactu

Para los ISVs españoles, la API gráfica basada en coordenadas de XFINIUM.PDF es fundamentalmente incompatible con los requisitos de facturación electrónica VeriFactu.

Por qué XFINIUM.PDF no es apto para VeriFactu

El régimen VeriFactu (Real Decreto-Ley 15/2025) requiere:

  1. Leyenda VERI*FACTU: Debe renderizarse con CSS3 moderno (Flexbox para posicionamiento horizontal). XFINIUM.PDF requiere coordenadas de píxeles manuales, sin CSS.
  2. QR de la AEAT: El código QR debe renderizarse con precisión en contexto HTML. XFINIUM.PDF no puede generar PDFs desde HTML.
  3. Firma TicketBAI XAdES: La firma digital para TicketBAI (Bizkaia, Gipuzkoa, Araba) requiere soporte explícito que XFINIUM.PDF no tiene.
  4. CSS moderno: El modelo de factura conforme usa Flexbox/Grid para la cabecera y el diseño de conceptos. DrawString() en coordenadas no es equivalente.

Generación de factura VeriFactu con IronPDF: datos peninsulares, NIF y EUR (sin coordenadas)

using IronPdf;

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
var html = @"
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .factura-header { display: flex; justify-content: space-between; }
        .verifactu-legend {
            border: 2px solid #003366;
            padding: 8px 12px;
            font-size: 10px;
            text-align: center;
            margin-top: 20px;
        }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 8px; }
        th { background-color: #003366; color: white; }
    </style>
</head>
<body>
    <div class='factura-header'>
        <!-- Flexbox — imposible con XFINIUM.PDF DrawString() -->
        <div>
            <strong>FACTURA Nº XF-2026-0001</strong><br>
            Emisor: Soluciones Digitales S.L. | NIF: B-22.334.455<br>
            Receptor: Empresa Cliente S.A. | CIF: A-55.667.788
        </div>
        <span>Fecha: 28/05/2026</span>
    </div>
    <table>
        <tr><th>Concepto</th><th>Base imponible</th><th>IVA 21%</th><th>Total</th></tr>
        <tr>
            <td>Licencia software .NET</td>
            <td>1.000,00 €</td>
            <td>210,00 €</td>
            <td>1.210,00 €</td>
        </tr>
    </table>
    <!-- Leyenda obligatoria VeriFactu (RDL 15/2025) -->
    <div class='verifactu-legend'>
        <strong>VERI*FACTU</strong><br>
        Factura verificable en la sede electrónica de la AEAT<br>
        [QR AEAT verificación]
    </div>
</body>
</html>";

// CSS3 moderno con Flexbox — sin coordenadas manuales de DrawString()
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("factura-verifactu-XF2026-0001.pdf");
C#

Lista de comprobación de conformidad VeriFactu post-migración

  • Eliminar dependencia XFINIUM.PDF del proyecto
  • Implementar leyenda VERI*FACTU en plantillas HTML de facturas
  • Añadir QR de la AEAT con URL de verificación
  • Verificar renderizado CSS3 Flexbox/Grid para cabecera de factura
  • Configurar firma TicketBAI XAdES si aplica (Bizkaia, Gipuzkoa, Araba)
  • Integrar Facturae XML para envío a FACe si procede
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 estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta