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

De PdfPig a IronPDF: Cumplir VeriFactu, TicketBAI y LOPDGDD en .NET

La migración de PdfPigaIronPDFamplía sus capacidades PDF de una biblioteca de sólo lectura a una solución PDF completa que gestiona la creación, la manipulación, la extracción de texto y las funciones de seguridad. Esta guía proporciona una ruta de migración completa, paso a paso, que conserva sus flujos de trabajo de extracción existentes al tiempo que añade la generación de PDF, la conversión HTML, la manipulación de documentos y las capacidades de seguridad que PdfPigno puede proporcionar.

Para los desarrolladores .NET en España, esta migración adquiere una dimensión estratégica adicional. Bajo el régimen VeriFactu (Real Decreto-Ley 15/2025), los proveedores de software de facturación deben integrar componentes PDF capaces de generar documentos con la cadena de huella (huella encadenada), incrustar la leyenda obligatoria VERI*FACTU o Factura verificable en la sede electrónica de la AEAT, y dar soporte a la generación de facturas electrónicas conforme a Facturae XML. PdfPig, al ser exclusivamente una biblioteca de lectura, no puede satisfacer estos requisitos. Las penalizaciones por incumplimiento para los proveedores de software de facturación pueden alcanzar los 150.000 € anuales según la AEAT. IronPDF, como componente dentro de software de facturación certificado, ofrece la base necesaria para cumplir con VeriFactu, TicketBAI en el País Vasco y las obligaciones de la Ley Crea y Crece para la factura electrónica B2B.

Por qué migrar de PdfPiga IronPDF

Entendiendo PdfPig

PdfPig es una biblioteca de lectura y extracción de PDF de código abierto diseñada específicamente para C#. Como rama del reputado proyecto Apache PDFBox, esta biblioteca permite a los desarrolladores acceder al contenido de los PDF con notable precisión. Aunque PdfPigbrilla por sus capacidades de extracción, su alcance es muy limitado en comparación con otras bibliotecas más completas disponibles en el mercado.

PdfPig proporciona a los desarrolladores herramientas fiables para extraer texto, imágenes, datos de formularios y metadatos de archivos PDF. Esto lo convierte en una opción adecuada para aplicaciones centradas principalmente en el análisis de documentos y la minería de datos. Sin embargo, las capacidades de PdfPigse limitan fundamentalmente al análisis sintáctico de documentos existentes.

La limitación de sólo lectura

PdfPig se centra exclusivamente en la lectura de PDF. Cuando su aplicación necesita crecer más allá de la extracción, PdfPigno puede ayudarle:

  1. No se pueden generar PDF: no se pueden crear archivos PDF desde HTML, URL o mediante programación.

  2. No HTML-to-PDF: PdfPiges una biblioteca de lectura/análisis de PDF, no una biblioteca de generación de PDF. Para la conversión de HTML a PDF es necesario utilizar una biblioteca diferente.

  3. Sin manipulación de documentos: no se pueden fusionar, dividir ni modificar archivos PDF.

  4. Sin funciones de seguridad: no se pueden agregar contraseñas, cifrado ni firmas digitales.

  5. Sin marcas de agua/sellos: no se pueden agregar superposiciones visuales a los documentos existentes.

  6. No se pueden rellenar formularios: no se pueden rellenar formularios PDF mediante programación.

Comparación entre PdfPige IronPDF

Característica PdfPig IronPDF
Licencia Código abierto (Apache 2.0) Comercial
Lectura/Extracción de PDF Excelente Excelente
Generación de PDF Limitado Completo
HTML a PDF No compatible Se admite
Extracción de texto Excelente Excelente
Manipulación de PDF No soportado Combinar, dividir, rotar
Marcas de agua No soportado Se admite
Seguridad/Encriptación No soportado Se admite
Soporte y documentación Apoyo a la comunidad Soporte dedicado
Indexación de páginas basado en 1 basado en 0

IronPDF es compatible con un conjunto completo de funciones para crear, leer, editar y firmar archivos PDF. Esta versatilidad permite a los desarrolladores gestionar archivos PDF de principio a fin. Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFofrece una solución completa para el ciclo de vida de PDF que va más allá de las capacidades de lectura de PdfPig.

A diferencia de PdfPig —que carece completamente de capacidades de generación y firma—, IronPDF permite incrustar firmas electrónicas PAdES conformes con eIDAS, generar facturas en formato Facturae XML embebidas en PDF/A-3 para cumplir con el SII (Suministro Inmediato de Información) de la AEAT, y añadir la leyenda VERI*FACTU requerida por la normativa antifraude. Esta capacidad es especialmente relevante para ISVs de facturación bajo VeriFactu que anteriormente dependían de PdfPig para la extracción de facturas recibidas y necesitan ahora también generar facturas emitidas conformes. Frente a iText (AGPL), IronPDF ofrece una licencia comercial clara que evita las obligaciones de distribución del código fuente bajo la Affero GPL, un riesgo particularmente relevante en el contexto de los requisitos de certificación de software de facturación en España.


Antes de empezar

Prerrequisitos

  1. Entorno .NET : .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Acceso a NuGet : Capacidad para instalar paquetes NuGet
  3. Licencia deIronPDF: Obtenga su clave de licencia en IronPDF

Cambios en el paquete NuGet

# Remove PdfPig
dotnet remove package PdfPig

# Install IronPDF
dotnet add package IronPdf
# Remove PdfPig
dotnet remove package PdfPig

# Install IronPDF
dotnet add package IronPdf
SHELL

Configuración de licencias

// 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";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Identificar el uso de PdfPig

# Find PdfPigusage
grep -r "UglyToad\.PdfPig\|PdfDocument\.Open\|GetPages\(\)" --include="*.cs" .

# Find page index references (may need 1→0 conversion)
grep -r "GetPage(\|NumberOfPages" --include="*.cs" .
# Find PdfPigusage
grep -r "UglyToad\.PdfPig\|PdfDocument\.Open\|GetPages\(\)" --include="*.cs" .

# Find page index references (may need 1→0 conversion)
grep -r "GetPage(\|NumberOfPages" --include="*.cs" .
SHELL

Referencia completa de la API

Cambios en el espacio de nombres

// Before: PdfPig
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
using UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PdfPig
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
using UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
' Before: PdfPig
Imports UglyToad.PdfPig
Imports UglyToad.PdfPig.Content
Imports UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor

' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

Mapas de carga de documentos

PdfPig IronPDF
PdfDocument.Open(path) PdfDocument.FromFile(path)
PdfDocument.Open(bytes) PdfDocument.FromBinaryData(bytes)
PdfDocument.Open(stream) PdfDocument.FromStream(stream)
using (var doc = ...) var pdf = ...

Acceso a páginas y asignaciones de propiedades

PdfPig IronPDF
document.NumberOfPages pdf.PageCount
document.GetPages() pdf.Pages
document.GetPage(1) pdf.Pages[0]

Mapas de extracción de texto

PdfPig IronPDF
page.Text pdf.Pages[i].Text
page.GetWords() pdf.ExtractTextFromPage(i)
(manual loop) pdf.ExtractAllText()

Metadatos de acceso

PdfPig IronPDF
document.Information.Title pdf.MetaData.Title
document.Information.Author pdf.MetaData.Author
document.Information.Subject pdf.MetaData.Subject
document.Information.Creator pdf.MetaData.Creator
document.Information.Producer pdf.MetaData.Producer

Nuevas funciones no disponibles en PdfPig

Características de IronPDF Descripción
renderer.RenderHtmlAsPdf(html) Conversión de HTML a PDF
renderer.RenderUrlAsPdf(url) Conversión de URL a PDF
PdfDocument.Merge(pdfs) Combinar varios PDF
pdf.ApplyWatermark(html) Añadir marcas de agua
pdf.SecuritySettings.UserPassword Protección mediante contraseña
pdf.Sign(certificate) Firmas digitales

Ejemplos de migración de código

Ejemplo 1: Extracción de texto de un PDF

Antes (PdfPig):

// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;
using System.Text;

class Program
{
    static void Main()
    {
        using (var document = PdfDocument.Open("input.pdf"))
        {
            var text = new StringBuilder();
            foreach (var page in document.GetPages())
            {
                text.AppendLine(page.Text);
            }
            Console.WriteLine(text.ToString());
        }
    }
}
// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;
using System.Text;

class Program
{
    static void Main()
    {
        using (var document = PdfDocument.Open("input.pdf"))
        {
            var text = new StringBuilder();
            foreach (var page in document.GetPages())
            {
                text.AppendLine(page.Text);
            }
            Console.WriteLine(text.ToString());
        }
    }
}
Imports UglyToad.PdfPig
Imports System
Imports System.Text

Class Program
    Shared Sub Main()
        Using document = PdfDocument.Open("input.pdf")
            Dim text = New StringBuilder()
            For Each page In document.GetPages()
                text.AppendLine(page.Text)
            Next
            Console.WriteLine(text.ToString())
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Después (IronPDF):

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

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        string text = pdf.ExtractAllText();
        Console.WriteLine(text);
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        string text = pdf.ExtractAllText();
        Console.WriteLine(text);
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("input.pdf")
        Dim text As String = pdf.ExtractAllText()
        Console.WriteLine(text)
    End Sub
End Class
$vbLabelText   $csharpLabel

Tanto PdfPigcomoIronPDFofrecen excelentes funciones de extracción de texto. La diferencia clave está en el patrón de código. PdfPigrequiere una declaración using con PdfDocument.Open(), iteración manual a través de las páginas con GetPages() y un StringBuilder para acumular texto de cada propiedad page.Text.

IronPDF simplifica esto a una sola llamada: PdfDocument.FromFile() carga el documento y ExtractAllText() devuelve todo el contenido de texto a la vez. No se requiere la declaración using, no hay iteración manual ni StringBuilder. Consulte la documentación sobre extracción de texto para obtener más opciones.

Ejemplo 2: Conversión de HTML a PDF

Antes (PdfPig):

PdfPig no admite la conversión de HTML a PDF. PdfPiges una biblioteca de lectura y análisis de PDF, no una biblioteca de generación de PDF. Necesitaría utilizar una biblioteca diferente para la conversión de HTML a PDF.

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>")
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Este ejemplo pone de manifiesto la carencia más significativa. PdfPigafirma explícitamente que "no admite la conversión de HTML a PDF" y que "es una biblioteca de lectura y análisis de PDF, no una biblioteca de generación de PDF" Si necesita crear PDF a partir de HTML con PdfPig, tendrá que utilizar una biblioteca completamente distinta.

IronPDF proporciona conversión nativa de HTML a PDF a través de ChromePdfRenderer. El método RenderHtmlAsPdf() acepta cadenas HTML y las convierte en documentos PDF utilizando un motor Chromium interno para una representación precisa de HTML, CSS y JavaScript. El PdfDocument resultante se puede guardar con SaveAs() o manipularlo más antes de guardarlo. Consulte la documentación HTML a PDF para ver ejemplos completos.

Ejemplo 3: Lectura de metadatos PDF

Antes (PdfPig):

// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;

class Program
{
    static void Main()
    {
        using (var document = PdfDocument.Open("input.pdf"))
        {
            var info = document.Information;
            Console.WriteLine($"Title: {info.Title}");
            Console.WriteLine($"Author: {info.Author}");
            Console.WriteLine($"Subject: {info.Subject}");
            Console.WriteLine($"Creator: {info.Creator}");
            Console.WriteLine($"Producer: {info.Producer}");
            Console.WriteLine($"Number of Pages: {document.NumberOfPages}");
        }
    }
}
// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;

class Program
{
    static void Main()
    {
        using (var document = PdfDocument.Open("input.pdf"))
        {
            var info = document.Information;
            Console.WriteLine($"Title: {info.Title}");
            Console.WriteLine($"Author: {info.Author}");
            Console.WriteLine($"Subject: {info.Subject}");
            Console.WriteLine($"Creator: {info.Creator}");
            Console.WriteLine($"Producer: {info.Producer}");
            Console.WriteLine($"Number of Pages: {document.NumberOfPages}");
        }
    }
}
Imports UglyToad.PdfPig
Imports System

Class Program
    Shared Sub Main()
        Using document = PdfDocument.Open("input.pdf")
            Dim info = document.Information
            Console.WriteLine($"Title: {info.Title}")
            Console.WriteLine($"Author: {info.Author}")
            Console.WriteLine($"Subject: {info.Subject}")
            Console.WriteLine($"Creator: {info.Creator}")
            Console.WriteLine($"Producer: {info.Producer}")
            Console.WriteLine($"Number of Pages: {document.NumberOfPages}")
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Después (IronPDF):

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

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        var info = pdf.MetaData;
        Console.WriteLine($"Title: {info.Title}");
        Console.WriteLine($"Author: {info.Author}");
        Console.WriteLine($"Subject: {info.Subject}");
        Console.WriteLine($"Creator: {info.Creator}");
        Console.WriteLine($"Producer: {info.Producer}");
        Console.WriteLine($"Number of Pages: {pdf.PageCount}");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var pdf = PdfDocument.FromFile("input.pdf");
        var info = pdf.MetaData;
        Console.WriteLine($"Title: {info.Title}");
        Console.WriteLine($"Author: {info.Author}");
        Console.WriteLine($"Subject: {info.Subject}");
        Console.WriteLine($"Creator: {info.Creator}");
        Console.WriteLine($"Producer: {info.Producer}");
        Console.WriteLine($"Number of Pages: {pdf.PageCount}");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim pdf = PdfDocument.FromFile("input.pdf")
        Dim info = pdf.MetaData
        Console.WriteLine($"Title: {info.Title}")
        Console.WriteLine($"Author: {info.Author}")
        Console.WriteLine($"Subject: {info.Subject}")
        Console.WriteLine($"Creator: {info.Creator}")
        Console.WriteLine($"Producer: {info.Producer}")
        Console.WriteLine($"Number of Pages: {pdf.PageCount}")
    End Sub
End Class
$vbLabelText   $csharpLabel

Ambas bibliotecas proporcionan acceso a metadatos con patrones casi idénticos. PdfPigaccede a los metadatos a través de document.Information y al recuento de páginas a través de document.NumberOfPages.IronPDFutiliza pdf.MetaData para metadatos y pdf.PageCount para el recuento de páginas.

La migración es sencilla: reemplace PdfDocument.Open() con PdfDocument.FromFile(), document.Information con pdf.MetaData y document.NumberOfPages con pdf.PageCount. Elimine el contenedor de declaración using ya queIronPDFno lo requiere.


Notas de migración críticas

Cambio en la indexación de páginas

PdfPig utiliza indexación basada en 1;IronPDFutiliza la base 0:

// PdfPig: basado en 1indexing
var firstPage = document.GetPage(1);  // First page

// IronPDF: basado en 0indexing
var firstPage = pdf.Pages[0];  // First page

// Migration helper
int pdfPigIndex = 1;
int ironPdfIndex = pdfPigIndex - 1;
// PdfPig: basado en 1indexing
var firstPage = document.GetPage(1);  // First page

// IronPDF: basado en 0indexing
var firstPage = pdf.Pages[0];  // First page

// Migration helper
int pdfPigIndex = 1;
int ironPdfIndex = pdfPigIndex - 1;
' PdfPig: basado en 1indexing
Dim firstPage = document.GetPage(1)  ' First page

' IronPDF: basado en 0indexing
Dim firstPage = pdf.Pages(0)  ' First page

' Migration helper
Dim pdfPigIndex As Integer = 1
Dim ironPdfIndex As Integer = pdfPigIndex - 1
$vbLabelText   $csharpLabel

Declaración de uso no obligatoria

// PdfPig: Requires using for disposal
using (var document = PdfDocument.Open("input.pdf"))
{
    // ...
}

// IronPDF: No using required (but can use for cleanup)
var pdf = PdfDocument.FromFile("input.pdf");
// ...
// pdf.Dispose(); // Optional
// PdfPig: Requires using for disposal
using (var document = PdfDocument.Open("input.pdf"))
{
    // ...
}

// IronPDF: No using required (but can use for cleanup)
var pdf = PdfDocument.FromFile("input.pdf");
// ...
// pdf.Dispose(); // Optional
Imports PdfPig
Imports IronPDF

Using document = PdfDocument.Open("input.pdf")
    ' ...
End Using

Dim pdf = PdfDocument.FromFile("input.pdf")
' ...
' pdf.Dispose() ' Optional
$vbLabelText   $csharpLabel

Cambio de carga del documento

// PdfPig: PdfDocument.Open()
using (var document = PdfDocument.Open("input.pdf"))

// IronPDF: PdfDocument.FromFile()
var pdf = PdfDocument.FromFile("input.pdf");
// PdfPig: PdfDocument.Open()
using (var document = PdfDocument.Open("input.pdf"))

// IronPDF: PdfDocument.FromFile()
var pdf = PdfDocument.FromFile("input.pdf");
Imports PdfPig
Imports IronPDF

Using document = PdfDocument.Open("input.pdf")
End Using

Dim pdf = PdfDocument.FromFile("input.pdf")
$vbLabelText   $csharpLabel

Cambio de nombre de propiedad de metadatos

// PdfPig: document.Information
var info = document.Information;

// IronPDF: pdf.MetaData
var info = pdf.MetaData;
// PdfPig: document.Information
var info = document.Information;

// IronPDF: pdf.MetaData
var info = pdf.MetaData;
' PdfPig: document.Information
Dim info = document.Information

' IronPDF: pdf.MetaData
Dim info = pdf.MetaData
$vbLabelText   $csharpLabel

Cambio de la propiedad de recuento de páginas

// PdfPig: document.NumberOfPages
Console.WriteLine($"Pages: {document.NumberOfPages}");

// IronPDF: pdf.PageCount
Console.WriteLine($"Pages: {pdf.PageCount}");
// PdfPig: document.NumberOfPages
Console.WriteLine($"Pages: {document.NumberOfPages}");

// IronPDF: pdf.PageCount
Console.WriteLine($"Pages: {pdf.PageCount}");
' PdfPig: document.NumberOfPages
Console.WriteLine($"Pages: {document.NumberOfPages}")

' IronPDF: pdf.PageCount
Console.WriteLine($"Pages: {pdf.PageCount}")
$vbLabelText   $csharpLabel

Nuevas capacidades tras la migración

Tras migrar a IronPDF, obtendrá funciones que PdfPigno puede ofrecerle:

Fusión de PDF

var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
$vbLabelText   $csharpLabel

Marcas de agua

pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>")
$vbLabelText   $csharpLabel

Protección con contraseña

pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"
$vbLabelText   $csharpLabel

Firmas digitales

var signature = new PdfSignature("certificate.pfx", "password")
{
    SigningContact = "support@company.com",
    SigningReason = "Document Approval"
};
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password")
{
    SigningContact = "support@company.com",
    SigningReason = "Document Approval"
};
pdf.Sign(signature);
Dim signature As New PdfSignature("certificate.pfx", "password") With {
    .SigningContact = "support@company.com",
    .SigningReason = "Document Approval"
}
pdf.Sign(signature)
$vbLabelText   $csharpLabel

Resumen comparativo de características

Característica PdfPig IronPDF
Extracción de Texto
Acceso a metadatos
Extracción de imágenes
Creación de PDF Limitado
HTML a PDF
URL a PDF
Fusionar PDF
Dividir PDF
Marcas de agua
Relleno de formularios
Protección por contraseña
Firmas digitales
Datos de posición de palabras

Cumplimiento normativo en España: lo que PdfPig no puede ofrecer

Para los desarrolladores de software de facturación en España, la elección de la biblioteca PDF no es solo una decisión técnica, sino también de cumplimiento legal. El marco regulatorio español exige capacidades activas de generación y firma que PdfPig, como biblioteca de solo lectura, no puede satisfacer.

VeriFactu y la penalización de 150.000 € por software no conforme

El Real Decreto-Ley 15/2025 establece que los proveedores de software de facturación que no integren las funcionalidades requeridas por VeriFactu se exponen a sanciones de hasta 150.000 € por año. Esto afecta directamente a los ISVs que distribuyen aplicaciones de gestión empresarial con módulo de facturación. Las obligaciones técnicas incluyen:

  • Generación de documentos PDF con la leyenda VERI*FACTU (preservar el asterisco) o Factura verificable en la sede electrónica de la AEAT
  • Encadenamiento de registros de facturación mediante huella (hash encadenado) para trazabilidad
  • Capacidad de exportar registros al formato XML de registro de facturación de la AEAT

TicketBAI en el País Vasco

Los ISVs que operan en los territorios de Bizkaia, Gipuzkoa y Araba deben implementar TicketBAI: facturas firmadas digitalmente en formato XML con firma XAdES. Esta obligación regional está actualmente en vigor y se aplica a las tres diputaciones forales de manera independiente. IronPDF proporciona las capacidades de firma digital (PAdES, firma con certificados .pfx) necesarias para integrar la generación de documentos PDF en pipelines de facturación TicketBAI.

LOPDGDD y el tratamiento de datos en facturación

El procesamiento de facturas —que contiene datos personales de clientes— está sujeto a la LOPDGDD (Ley Orgánica de Protección de Datos y Garantía de Derechos Digitales), la transposición española del RGPD supervisada por la AEPD. El procesamiento local con IronPDF (sin enviar datos a servicios externos) simplifica la gestión de la base legal para el tratamiento de datos en sistemas de facturación.


Lista de comprobación de la migración

Pre-Migración

  • Inventariar todo el uso de PdfPigen el código base
  • Identifique si necesita datos de posición a nivel de palabra (considere un enfoque híbrido)
  • Tenga en cuenta todas las referencias de índice de página (es necesario convertir de base 1 a base 0)
  • Planifique el almacenamiento de la clave de licencia deIronPDF(se recomiendan variables de entorno)
  • Pruebe primero con la licencia de prueba de IronPDF

Cambios en el paquete

  • Eliminar PdfPig paquete NuGet : dotnet remove package PdfPig
  • Instalar IronPdf el paquete NuGet : dotnet add package IronPdf

Cambios de código

  • Actualizar las importaciones del espacio de nombres (using UglyToad.PdfPig;using IronPdf;)
  • Reemplace PdfDocument.Open() con PdfDocument.FromFile()
  • Reemplace document.Information con pdf.MetaData
  • Reemplace document.NumberOfPages con pdf.PageCount
  • Convertir índices de página de base 1 a base 0
  • Eliminar las declaraciones using (opcional,IronPDFno las requiere)
  • Agregue la clave de licencia deIronPDFal iniciar la aplicación

Posmigración

  • La salida de la extracción de texto de prueba coincide con las expectativas
  • Probar todos los escenarios de generación de PDF
  • Agregue nuevas capacidades (fusión, marcas de agua, seguridad) según sea necesario
  • Instalar dependencias de Linux si se realiza la implementación en Linux

Preguntas Frecuentes

¿Por qué PdfPig no es apto para cumplir con VeriFactu?

PdfPig es una biblioteca de solo lectura: no puede generar PDFs, añadir la leyenda VERI*FACTU, incrustar el QR de la AEAT ni firmar documentos. El Real Decreto-Ley 15/2025 exige que el software de facturación genere activamente PDFs conformes. Las sanciones para proveedores incumplidores alcanzan 150.000 €/año.

¿Qué ventaja tiene IronPDF sobre iText con licencia AGPL para ISVs españoles?

iText bajo AGPL requiere distribuir el código fuente de las aplicaciones que lo integren, lo cual es inviable para ISVs de software propietario. IronPDF ofrece licencia comercial sin obligaciones de código fuente, especialmente relevante para software de facturación certificado en España.

¿Soporta IronPDF las firmas XAdES para TicketBAI en Bizkaia, Gipuzkoa y Araba?

Sí. IronPDF incluye soporte nativo de firmas digitales PAdES y XAdES, necesarias para TicketBAI en los tres territorios históricos vascos. La implementación permite integrar la firma en el flujo de generación del PDF sin herramientas externas.

¿Cómo cumple IronPDF con la LOPDGDD al procesar facturas?

IronPDF procesa todos los documentos localmente sin enviar datos a servidores externos. Esto facilita el cumplimiento de la LOPDGDD supervisada por la AEPD: los datos de NIF/CIF, importes y datos de clientes permanecen en su infraestructura, bajo su control.

¿Puede IronPDF generar PDF/A-3 para Facturae XML en FACe?

Sí. IronPDF soporta la generación de PDF/A-3 con adjuntos XML (Facturae), necesario para el envío a FACe y el cumplimiento de la Ley Crea y Crece para factura electrónica B2B a partir de 2027.

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

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame