Cómo agregar encabezados y pies de página en PDF usando IronPDF

Encabezados y pies de página en PDF con C#: leyenda VERI*FACTU, código CSV y firma del organismo

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronPDF te permite añadir encabezados y pies de página a documentos PDF en C# — incluida la *leyenda mandatoria `VERIFACTU** (con asterisco intermedio preservado verbatim) o el texto alternativoFactura verificable en la sede electrónica de la AEATexigido por el régimen español **VeriFactu** (RDL 15/2025) sobre las visualizaciones de factura; el **código CSV** (Código Seguro de Verificación) y la URL de verificación que el sector público español incluye en el pie de página de toda notificación electrónica; el **sello del organismo emisor** en documentación administrativa; y la **referencia a lahuella` encadenada** del libro de eventos VeriFactu cuando aplique.

¿Necesita incluir números de página, un logo de la empresa, una fecha, o las leyendas regulatorias específicas del régimen español, en la parte superior o inferior de cada página en un documento PDF? IronPDF simplifica la aplicación de encabezados y pies de página a archivos PDF en su proyecto de C#. Ya se trate de informes, facturas o cualquier otro documento comercial, los encabezados y pies de página son elementos cruciales de navegación e identificación que mejoran la usabilidad del documento.

Inicio rápido: Cómo agregar encabezados y pies de página a archivos PDF en C#

Agregue fácilmente encabezados y pies de página a sus documentos PDF usando IronPDF en C#. Esta guía muestra cómo aplicar encabezados y pies de página basados en texto con números de página y texto personalizado en cuestión de segundos. Utilice los métodos y para mejorar rápidamente la presentación de su PDF. Guarde su PDF actualizado con un código mínimo, asegurando un acabado profesional a sus documentos.

  1. Instala IronPDF con el Administrador de Paquetes NuGet

    PM > Install-Package IronPdf
  2. Copie y ejecute este fragmento de código.

    new IronPdf.ChromePdfRenderer { RenderingOptions = { TextHeader = new IronPdf.TextHeaderFooter { CenterText = "Report • {date}" }, TextFooter = new IronPdf.TextHeaderFooter { RightText = "Page {page} of {total-pages}" } } }
        .RenderHtmlAsPdf("<h1>Hello World!</h1>")
        .SaveAs("withHeadersFooters.pdf");
  3. Despliegue para probar en su entorno real

    Comienza a usar IronPDF en tu proyecto hoy mismo con una prueba gratuita

    arrow pointer

¿Cómo añado un encabezado/pie de texto?

Para crear un encabezado/pie de página solo con texto, instancie un objeto , agregue el texto deseado e incorpore el objeto a su PDF. La clase proporciona una manera sencilla de agregar elementos de texto consistentes a lo largo de todas las páginas de su documento. Este método es especialmente útil para encabezados y pies de página sencillos que no requieran un formato o estilo complejos.

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-add-textheaderfooter.cs
using IronPdf;

// Instantiate renderer and create PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");

// Create text header
TextHeaderFooter textHeader = new TextHeaderFooter
{
    CenterText = "This is the header!",
};

// Create text footer
TextHeaderFooter textFooter = new TextHeaderFooter
{
    CenterText = "This is the footer!",
};

// Add text header and footer to the PDF
pdf.AddTextHeaders(textHeader);
pdf.AddTextFooters(textFooter);

pdf.SaveAs("addTextHeaderFooter.pdf");
Imports IronPdf

' Instantiate renderer and create PDF
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")

' Create text header
Dim textHeader As New TextHeaderFooter With {
    .CenterText = "This is the header!"
}

' Create text footer
Dim textFooter As New TextHeaderFooter With {
    .CenterText = "This is the footer!"
}

' Add text header and footer to the PDF
pdf.AddTextHeaders(textHeader)
pdf.AddTextFooters(textFooter)

pdf.SaveAs("addTextHeaderFooter.pdf")
$vbLabelText   $csharpLabel

¿Cómo puedo añadir encabezados/pies de página durante la renderización?

Alternativamente, puede añadir directamente un encabezado/pie de página utilizando las `` del renderizador. Esto añade el encabezado y el pie de página del texto durante el proceso de renderizado, lo que resulta más eficaz que añadirlos una vez creado el PDF. Este enfoque es recomendable cuando se conoce de antemano el contenido del encabezado y el pie de página, ya que reduce el tiempo de procesamiento y garantiza un formato coherente desde el principio.

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-render-with-textheaderfooter.cs
using IronPdf;

// Instantiate renderer
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Create header and add to rendering options
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText = "This is the header!",
};


// Create footer and add to rendering options
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "This is the footer!",
};

// Render PDF with header and footer
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");
pdf.SaveAs("renderWithTextHeaderFooter.pdf");
Imports IronPdf

' Instantiate renderer
Dim renderer As New ChromePdfRenderer()

' Create header and add to rendering options
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
    .CenterText = "This is the header!"
}

' Create footer and add to rendering options
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
    .CenterText = "This is the footer!"
}

' Render PDF with header and footer
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")
pdf.SaveAs("renderWithTextHeaderFooter.pdf")
$vbLabelText   $csharpLabel

¿Cómo puedo personalizar las propiedades del texto y del divisor?

En la clase ``, puede establecer texto para las posiciones izquierda, central y derecha. Además, puede personalizar el tipo de fuente y el tamaño del texto y agregar un divisor con un color personalizado configurando las propiedades relevantes. Estas opciones de personalización permiten crear encabezados y pies de página que se ajusten a la marca corporativa o a las directrices de estilo del documento. La función de línea divisoria es especialmente útil para crear una separación visual entre el encabezado/pie de página y el contenido principal.

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-textheaderfooter-options.cs
using IronPdf;
using IronPdf.Font;
using IronSoftware.Drawing;

// Create text header
TextHeaderFooter textHeader = new TextHeaderFooter
{
    CenterText = "Center text", // Set the text in the center
    LeftText = "Left text", // Set left-hand side text
    RightText = "Right text", // Set right-hand side text
    Font = IronSoftware.Drawing.FontTypes.ArialBoldItalic, // Set font
    FontSize = 16, // Set font size
    DrawDividerLine = true, // Draw Divider Line
    DrawDividerLineColor = Color.Red, // Set color of divider line
};
Imports IronPdf
Imports IronPdf.Font
Imports IronSoftware.Drawing

' Create text header
Private textHeader As New TextHeaderFooter With {
	.CenterText = "Center text",
	.LeftText = "Left text",
	.RightText = "Right text",
	.Font = IronSoftware.Drawing.FontTypes.ArialBoldItalic,
	.FontSize = 16,
	.DrawDividerLine = True,
	.DrawDividerLineColor = Color.Red
}
$vbLabelText   $csharpLabel

¿Qué aspecto tiene el encabezado de texto personalizado?

Ejemplo de alineación de texto que muestra las opciones de posicionamiento del texto a la izquierda, al centro y a la derecha

¿Qué fuentes están disponibles por defecto?

Puede ver qué tipos de fuentes están disponibles por defecto en la Referencia de la API de IronPDF. IronPDF es compatible con una amplia gama de fuentes estándar, como Arial, Times New Roman, Helvetica, Courier y sus variantes. Si necesita fuentes personalizadas, obtenga más información sobre la gestión de fuentes en IronPDF.

¿Cómo definir los márgenes de los encabezados/pies de texto?

Por defecto, los encabezados y pies de página de IronPDF vienen con márgenes predefinidos. Si quiere que el encabezado de texto abarque todo el ancho del documento PDF, especifique valores de margen de 0. Esto se puede lograr estableciendo los márgenes directamente en las funciones y o a través de las en. Comprender el control de márgenes es crucial para lograr maquetaciones perfectas, especialmente cuando se trabaja con tamaños de papel personalizados.

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-textheaderfooter-margins.cs
using IronPdf;

// Instantiate renderer and create PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");

TextHeaderFooter header = new TextHeaderFooter
{
    CenterText = "This is the header!",
};

TextHeaderFooter footer = new TextHeaderFooter
{
    CenterText = "This is the footer!",
};

pdf.AddTextHeaders(header, 35, 30, 25); // Left Margin = 35, Right Margin  = 30, Top Margin = 25
pdf.AddTextFooters(footer, 35, 30, 25); // Margin values are in mm
Imports IronPdf

' Instantiate renderer and create PDF
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")

Dim header As New TextHeaderFooter With {
    .CenterText = "This is the header!"
}

Dim footer As New TextHeaderFooter With {
    .CenterText = "This is the footer!"
}

pdf.AddTextHeaders(header, 35, 30, 25) ' Left Margin = 35, Right Margin = 30, Top Margin = 25
pdf.AddTextFooters(footer, 35, 30, 25) ' Margin values are in mm
$vbLabelText   $csharpLabel

¿Cómo aplico márgenes a través de las opciones de renderizado?

Si agrega valores de margen en las de, estos márgenes también se aplicarán al encabezado y pie de página. Este enfoque proporciona una forma centralizada de gestionar los márgenes en todo el documento, incluidos los encabezados, los pies de página y el contenido principal. Para una personalización más avanzada de los márgenes, consulta nuestra guía sobre la configuración de márgenes personalizados.

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-rendering-options-margins.cs
using IronPdf;

// Instantiate renderer and create PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();

TextHeaderFooter header = new TextHeaderFooter
{
    CenterText = "This is the header!",
};

TextHeaderFooter footer = new TextHeaderFooter
{
    CenterText = "This is the footer!",
};

// Margin values are in mm
renderer.RenderingOptions.MarginRight = 30;
renderer.RenderingOptions.MarginLeft = 30;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;

// Add header and footer to renderer
renderer.RenderingOptions.TextHeader = header;
renderer.RenderingOptions.TextFooter = footer;

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");
Imports IronPdf

' Instantiate renderer and create PDF
Private renderer As New ChromePdfRenderer()

Private header As New TextHeaderFooter With {.CenterText = "This is the header!"}

Private footer As New TextHeaderFooter With {.CenterText = "This is the footer!"}

' Margin values are in mm
renderer.RenderingOptions.MarginRight = 30
renderer.RenderingOptions.MarginLeft = 30
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25

' Add header and footer to renderer
renderer.RenderingOptions.TextHeader = header
renderer.RenderingOptions.TextFooter = footer

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")
$vbLabelText   $csharpLabel

¿Por qué debo evitar ``?

La propiedad en no es adecuada para este caso de uso. Aplica los mismos valores de margen al encabezado, pie de página y contenido principal, lo que puede causar que el encabezado se superponga con el cuerpo del documento. Esta propiedad está destinada principalmente a aplicar encabezados y pies de página a PDFs existentes utilizando el método ``. Para controlar mejor la maquetación, considere la posibilidad de utilizar saltos de página para gestionar el flujo de contenidos.

¿Qué es el dimensionamiento dinámico de márgenes?

Los márgenes estáticos planteaban un problema cuando el contenido de las cabeceras variaba de un documento a otro. Hubo que hacer ajustes no solo en los márgenes de cabecera y pie de página, sino también en el margen HTML principal para adaptarse a los distintos tamaños de cabecera y pie de página. En consecuencia, hemos implementado una función de dimensionamiento dinámico de los márgenes en la que la altura de la cabecera y el pie de página se ajustan dinámicamente en función del contenido, y el HTML principal se reposiciona en consecuencia. Esta función es especialmente útil cuando se trabaja con diseños CSS adaptables. Utilice el código siguiente para probar esta función:

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-dynamic-marigns.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
    HtmlFragment = @"<div style='background-color: #4285f4; color: white; padding: 15px; text-align: center;'>
                    <h1>Example header</h1> <br>
                    <p>Header content</p>
                    </div>",
    // Enable the dynamic height feature
    MaxHeight = HtmlHeaderFooter.FragmentHeight,
};

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Main HTML content</h1>");
pdf.SaveAs("dynamicHeaderSize.pdf");
Imports IronPdf

Private renderer As New ChromePdfRenderer()

renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
	.HtmlFragment = "<div style='background-color: #4285f4; color: white; padding: 15px; text-align: center;'>
                    <h1>Example header</h1> <br>
                    <p>Header content</p>
                    </div>",
	.MaxHeight = HtmlHeaderFooter.FragmentHeight
}

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Main HTML content</h1>")
pdf.SaveAs("dynamicHeaderSize.pdf")
$vbLabelText   $csharpLabel

¿Cómo añado metadatos a los encabezados/pies de texto?

Puede añadir fácilmente metadatos como números de página, fecha y título del PDF incorporando cadenas de marcadores de posición en el texto. Estos marcadores de posición se sustituyen automáticamente por los valores correspondientes al renderizar el PDF. Esta función es esencial para crear encabezados y pies de página dinámicos que se actualicen automáticamente en función de las propiedades del documento. Aquí están todas las opciones de metadatos disponibles:

  • ``: Número de página actual.
  • ``: Número total de páginas.
  • ``: URL web desde la cual se generó el documento PDF.
  • ``: Fecha actual.
  • ``: Hora actual.
  • : Título HTML especificado en la etiqueta en HTML.
  • ``: Título PDF especificado en los metadatos del PDF.

¿Qué marcadores de posición debo utilizar con más frecuencia?

Para aprender más sobre y, visite la guía de números de página de IronPDF. Estos marcadores de posición son los más utilizados ya que proporcionan información de navegación esencial. Los marcadores de fecha y hora son especialmente útiles para documentos que necesitan un seguimiento de la fecha y hora, como informes o facturas.

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-mail-merge.cs
using IronPdf;

// Create header and footer
TextHeaderFooter textHeader = new TextHeaderFooter
{
    CenterText = "{page} of {total-pages}",
    LeftText = "Today's date: {date}",
    RightText = "The time: {time}",
};

TextHeaderFooter textFooter = new TextHeaderFooter
{
    CenterText = "Current URL: {url}",
    LeftText = "Title of the HTML: {html-title}",
    RightText = "Title of the PDF: {pdf-title}",
};
Imports IronPdf

' Create header and footer
Private textHeader As New TextHeaderFooter With {
	.CenterText = "{page} of {total-pages}",
	.LeftText = "Today's date: {date}",
	.RightText = "The time: {time}"
}

Private textFooter As New TextHeaderFooter With {
	.CenterText = "Current URL: {url}",
	.LeftText = "Title of the HTML: {html-title}",
	.RightText = "Title of the PDF: {pdf-title}"
}
$vbLabelText   $csharpLabel

¿Cómo añado encabezados/pies de página HTML?

Puede personalizar aún más su encabezado/pie de página utilizando HTML y CSS. Para crear un encabezado/pie de página en HTML, utilice la clase . Este enfoque ofrece la máxima flexibilidad, ya que permite incluir imágenes, diseños complejos y contenido con estilo en los encabezados y pies de página. Si desea conservar los estilos CSS de una hoja de estilo CSS, configureLoadStylesAndCSSFromMainHtmlDocument = true`` en las propiedades de la clase. Esto resulta especialmente útil cuando se trabaja con fuentes e iconos web.

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-htmlheaderfooter.cs
using IronPdf;

string headerHtml = @"
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a header!</h1>
    </body>
    </html>";

string footerHtml = @"
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a footer!</h1>
    </body>
    </html>";

// Instantiate renderer and create PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");

// Create header and footer
HtmlHeaderFooter htmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = headerHtml,
    LoadStylesAndCSSFromMainHtmlDocument = true,
};

HtmlHeaderFooter htmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = footerHtml,
    LoadStylesAndCSSFromMainHtmlDocument = true,
};

// Add to PDF
pdf.AddHtmlHeaders(htmlHeader);
pdf.AddHtmlFooters(htmlFooter);
Imports IronPdf

Private headerHtml As String = "
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a header!</h1>
    </body>
    </html>"

Private footerHtml As String = "
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a footer!</h1>
    </body>
    </html>"

' Instantiate renderer and create PDF
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")

' Create header and footer
Private htmlHeader As New HtmlHeaderFooter With {
	.HtmlFragment = headerHtml,
	.LoadStylesAndCSSFromMainHtmlDocument = True
}

Private htmlFooter As New HtmlHeaderFooter With {
	.HtmlFragment = footerHtml,
	.LoadStylesAndCSSFromMainHtmlDocument = True
}

' Add to PDF
pdf.AddHtmlHeaders(htmlHeader)
pdf.AddHtmlFooters(htmlFooter)
$vbLabelText   $csharpLabel

¿Cómo controlo los márgenes del encabezado/pie de página HTML?

Al igual que los encabezados y pies de página de texto, los métodos y tienen márgenes predefinidos aplicados a ellos. Para aplicar márgenes personalizados, use una sobrecarga de las funciones con los valores de margen especificados. Para abarcar todo el contenido sin márgenes, establezca los márgenes en la función de sobrecarga en 0. Este nivel de control es esencial a la hora de crear documentos profesionales con requisitos de maquetación específicos.

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-htmlheaderfooter-margins.cs
// Add to PDF
pdf.AddHtmlHeaders(header, 0, 0, 0);
pdf.AddHtmlFooters(footer, 0, 0, 0);
' Add to PDF
pdf.AddHtmlHeaders(header, 0, 0, 0)
pdf.AddHtmlFooters(footer, 0, 0, 0)
$vbLabelText   $csharpLabel

¿Puedo añadir encabezados/pies de página HTML durante la renderización?

La adición de encabezados y pies de página también se puede hacer directamente a través de las `` del renderizador. Esto añade el encabezado y el pie de página HTML durante el proceso de renderización, lo que resulta más eficaz que el procesamiento posterior. Este método es especialmente útil cuando se generan PDF a partir de archivos HTML o conversiones de URL a PDF.

:path=/static-assets/pdf/content-code-examples/how-to/headers-and-footers-htmlheaderfooter.cs
using IronPdf;

string headerHtml = @"
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a header!</h1>
    </body>
    </html>";

string footerHtml = @"
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a footer!</h1>
    </body>
    </html>";

// Instantiate renderer and create PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>");

// Create header and footer
HtmlHeaderFooter htmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = headerHtml,
    LoadStylesAndCSSFromMainHtmlDocument = true,
};

HtmlHeaderFooter htmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = footerHtml,
    LoadStylesAndCSSFromMainHtmlDocument = true,
};

// Add to PDF
pdf.AddHtmlHeaders(htmlHeader);
pdf.AddHtmlFooters(htmlFooter);
Imports IronPdf

Private headerHtml As String = "
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a header!</h1>
    </body>
    </html>"

Private footerHtml As String = "
    <html>
    <head>
        <link rel='stylesheet' href='style.css'>
    </head>
    <body>
        <h1>This is a footer!</h1>
    </body>
    </html>"

' Instantiate renderer and create PDF
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")

' Create header and footer
Private htmlHeader As New HtmlHeaderFooter With {
	.HtmlFragment = headerHtml,
	.LoadStylesAndCSSFromMainHtmlDocument = True
}

Private htmlFooter As New HtmlHeaderFooter With {
	.HtmlFragment = footerHtml,
	.LoadStylesAndCSSFromMainHtmlDocument = True
}

' Add to PDF
pdf.AddHtmlHeaders(htmlHeader)
pdf.AddHtmlFooters(htmlFooter)
$vbLabelText   $csharpLabel

¿Cuándo utilizar encabezados/pies de página de texto o HTML?

A la hora de decidir entre cabeceras/pies de página de texto o HTML, hay que tener en cuenta las ventajas y desventajas. Si prioriza un renderizado de PDF más rápido, opte por los encabezados/pies de página de texto. Si la personalización y el estilo son esenciales, elija encabezados/pies de página HTML. La diferencia de tiempo de renderizado entre las cabeceras/pies de página de texto y HTML es mínima cuando las cabeceras/pies de página HTML tienen un contenido limitado. Sin embargo, aumenta a medida que aumenta el tamaño y el número de activos en las cabeceras/pies de página HTML.

¿Cuáles son las implicaciones para el rendimiento?

Las cabeceras y pies de página de texto se renderizan más rápido porque no requieren el análisis sintáctico de HTML ni el procesamiento de CSS. Las cabeceras/pies de página HTML ofrecen más flexibilidad, pero requieren un tiempo de renderizado adicional proporcional a su complejidad. Cuando se trabaja con documentos de gran tamaño o procesamiento por lotes, la diferencia de rendimiento se hace más notable. Para obtener un rendimiento óptimo en situaciones de gran volumen, tenga en cuenta nuestra guía sobre la generación asíncrona de PDF.


Encabezados y pies de página para flujos regulatorios españoles

El régimen documental español impone contenidos específicos en pies de página y encabezados de determinados tipos de documento — incumplir estas exigencias produce rechazo automático en sistemas de cumplimiento o en auditorías AEAT/AEPD.

Leyenda mandatoria VERI*FACTU en facturas

Bajo VeriFactu (Real Decreto-Ley 15/2025 de 2 de diciembre de 2025), toda visualización de factura cuyo sistema esté operando en modo VeriFactu debe incluir, además del código QR de la AEAT, una leyenda textual mandatoria — preservada verbatim sin modificaciones, traducciones ni paráfrasis:

  • VERI*FACTU — con asterisco en el medio, exactamente así
  • Factura verificable en la sede electrónica de la AEAT — alternativa o complemento

Ambos elementos pueden coexistir. El asterisco intermedio de VERI*FACTU es load-bearing — la AEAT lo trata como elemento distintivo del sello regulatorio. Cualquier paráfrasis (VERI-FACTU, VeriFactu, Veri Factu, etc.) invalida el cumplimiento formal.

using IronPdf;

// Encabezado HTML con el QR AEAT y la leyenda VERI*FACTU mandatoria.
// El QR se genera previamente con IronQR a partir del payload de
// verificación que la especificación AEAT define (URL sede + datos
// mínimos del documento + identificador del registro).
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='display: flex; justify-content: space-between; padding: 10px 30px;'>
            <div>
                <img src='qr-aeat.png' style='height: 80px;' alt='QR AEAT' />
            </div>
            <div style='font-size: 11px; text-align: right;'>
                <strong>VERI*FACTU</strong><br>
                Factura verificable en la sede electrónica de la AEAT
            </div>
        </div>",
    MaxHeight = 25  // mm
};

var pdf = renderer.RenderHtmlFileAsPdf("factura.html");
pdf.SaveAs("factura-verifactu.pdf");
using IronPdf;

// Encabezado HTML con el QR AEAT y la leyenda VERI*FACTU mandatoria.
// El QR se genera previamente con IronQR a partir del payload de
// verificación que la especificación AEAT define (URL sede + datos
// mínimos del documento + identificador del registro).
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='display: flex; justify-content: space-between; padding: 10px 30px;'>
            <div>
                <img src='qr-aeat.png' style='height: 80px;' alt='QR AEAT' />
            </div>
            <div style='font-size: 11px; text-align: right;'>
                <strong>VERI*FACTU</strong><br>
                Factura verificable en la sede electrónica de la AEAT
            </div>
        </div>",
    MaxHeight = 25  // mm
};

var pdf = renderer.RenderHtmlFileAsPdf("factura.html");
pdf.SaveAs("factura-verifactu.pdf");
Imports IronPdf

' Encabezado HTML con el QR AEAT y la leyenda VERI*FACTU mandatoria.
' El QR se genera previamente con IronQR a partir del payload de
' verificación que la especificación AEAT define (URL sede + datos
' mínimos del documento + identificador del registro).
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <div style='display: flex; justify-content: space-between; padding: 10px 30px;'>
            <div>
                <img src='qr-aeat.png' style='height: 80px;' alt='QR AEAT' />
            </div>
            <div style='font-size: 11px; text-align: right;'>
                <strong>VERI*FACTU</strong><br>
                Factura verificable en la sede electrónica de la AEAT
            </div>
        </div>",
    .MaxHeight = 25 ' mm
}

Dim pdf = renderer.RenderHtmlFileAsPdf("factura.html")
pdf.SaveAs("factura-verifactu.pdf")
$vbLabelText   $csharpLabel

Para flujos TicketBAI en territorio foral vasco (Bizkaia, Gipuzkoa, Araba), el ticket lleva adicionalmente su propio QR foral y la leyenda específica que cada Diputación Foral publica en su esquema XSD. La leyenda foral coexiste con la VERI*FACTU cuando el sujeto pasivo opera bajo ambos regímenes.

Código CSV y URL de verificación en notificaciones electrónicas

Las notificaciones electrónicas del sector público español — sede electrónica de la AEAT, FACe, sedes electrónicas de Comunidades Autónomas y Entidades Locales — incluyen un Código Seguro de Verificación (CSV) en el pie de página de cada notificación. El CSV es un identificador alfanumérico que permite al ciudadano (o a cualquier tercero) verificar la autenticidad del documento accediendo a la sede electrónica del organismo y consultando con el código:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    LeftText = "Notificación electrónica — Ministerio de Asuntos Económicos",
    CenterText = "CSV: A1B2-C3D4-E5F6-G7H8",
    RightText = "Verificar en: sede.economia.gob.es/csv"
};
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    LeftText = "Notificación electrónica — Ministerio de Asuntos Económicos",
    CenterText = "CSV: A1B2-C3D4-E5F6-G7H8",
    RightText = "Verificar en: sede.economia.gob.es/csv"
};
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
    .LeftText = "Notificación electrónica — Ministerio de Asuntos Económicos",
    .CenterText = "CSV: A1B2-C3D4-E5F6-G7H8",
    .RightText = "Verificar en: sede.economia.gob.es/csv"
}
$vbLabelText   $csharpLabel

El CSV se genera del lado servidor (no es responsabilidad de IronPDF), pero la composición visual del pie de página con el CSV, la URL de verificación y la identificación del organismo es estándar en todo el sector público bajo Esquema Nacional de Interoperabilidad.

Pie de página con sello del organismo y firma electrónica

Para resoluciones administrativas, certificados oficiales, y notificaciones que requieren firma electrónica del empleado público responsable, el pie de página típicamente incluye: identificación del firmante (nombre, NIF, condición funcional, organismo), fecha y hora de firma, certificado utilizado (huella digital del certificado FNMT-RCM cualificado), y referencia al expediente bajo el cual se emite el documento. La firma criptográfica PAdES se aplica sobre el documento ya completo (después del renderizado de encabezados/pies); consulte Firma electrónica de PDF en C# para eIDAS QES, FNMT-RCM y flujos españoles para el flujo completo.

Marca de borrador y estados internos

Adicionalmente a las leyendas regulatorias, el contexto ibérico habitualmente usa marcas de estado en cabecera o como marca de agua: BORRADOR para facturas no contabilizadas definitivamente, RECTIFICATIVA para facturas que sustituyen a una anterior conforme con el artículo 80 LIVA, ANULADA para facturas dejadas sin efecto, COPIA para reproducciones que no constituyen el documento original. La marca debe ser claramente distinguible — habitualmente en color contrastado y tamaño mayor — para evitar confusión con la versión definitiva del documento.


¿Listo para ver qué más puedes hacer? Consulte nuestra página de tutoriales aquí: Crear PDF

Preguntas Frecuentes

¿Cómo añado encabezados y pies de página de texto a un PDF en C#?

Con IronPDF, puede añadir encabezados y pies de página de texto utilizando los métodos AddTextHeaders y AddTextFooters. Basta con instanciar un objeto TextHeaderFooter, añadir el texto deseado y aplicarlo al PDF. Esto proporciona una forma sencilla de añadir elementos de texto coherentes, como números de página o títulos de documentos en todas las páginas.

¿Puedo incluir números de página en los encabezados o pies de página de mi PDF?

Sí, IronPDF admite la numeración dinámica de páginas mediante marcadores de posición especiales. Puede utilizar {page} para el número de página actual y {total-pages} para el número total de páginas en sus objetos TextHeaderFooter. Por ejemplo, si establece RightText = "Page {page} of {total-pages}" se mostrarán automáticamente los números de página correctos en cada página.

¿Es posible añadir encabezados y pies de página basados en HTML con estilo CSS?

Por supuesto IronPDF proporciona los métodos AddHtmlHeaders y AddHtmlFooters que permiten añadir contenido HTML con soporte completo de estilos CSS. Esto le permite crear encabezados y pies de página complejos con texto formateado, imágenes y estilos personalizados para que coincidan con las directrices de su marca.

¿Cuál es la forma más eficaz de añadir encabezados y pies de página a los PDF?

El método más eficaz consiste en añadir encabezados y pies de página durante el proceso de renderizado mediante las RenderingOptions de IronPDF. Al configurar las propiedades TextHeader y TextFooter en ChromePdfRenderer antes de la renderización, se reduce el tiempo de procesamiento en comparación con la adición de ellos después de crear el PDF.

¿Puedo añadir contenido diferente a las secciones izquierda, central y derecha de los encabezados/pies de página?

Sí, la clase TextHeaderFooter en IronPDF proporciona propiedades LeftText, CenterText y RightText, lo que le permite colocar contenido diferente en cada sección. Esto le da flexibilidad para organizar información como fechas a la izquierda, títulos en el centro y números de página a la derecha.

¿Cómo añado el logotipo de una empresa a las cabeceras de mis PDF?

Para añadir un logotipo de empresa a los encabezados de su PDF, utilice el método AddHtmlHeaders en IronPDF. Puede incluir una etiqueta de imagen en su contenido HTML que apunte a su archivo de logotipo, junto con cualquier estilo o posicionamiento adicional utilizando CSS para asegurarse de que aparece exactamente donde lo desea.

¿Puedo incluir fechas en los encabezados y pies de página de mis PDF?

Sí, IronPDF admite la inserción dinámica de fechas mediante el marcador de posición {date} en objetos TextHeaderFooter. Cuando incluya {date} en el texto del encabezado o pie de página, se sustituirá automáticamente por la fecha actual cuando se genere el PDF.

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
¿Listo para empezar?
Nuget Descargas 19,014,616 | Versión: 2026.5 just released
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package IronPdf
ejecutar una muestra Mira cómo tu HTML se convierte en PDF.