Crear PDFs en C# con convenciones españolas: facturas, certificados, modelos

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

Crear PDFs programáticamente con convenciones documentales españolas — formato numérico con coma decimal y punto miles (1.234,56 €), tipografía A4 estándar ibérica, NIF y dirección fiscal en cabecera de factura, leyendas regulatorias VERI*FACTU cuando aplique, sello de empresa, firma PAdES con certificado FNMT-RCM — exige acoplar la API de IronPDF con las particularidades formales del mercado ibérico. Iron Software simplifica este proceso consolidando varias funciones de creación de PDF en métodos intuitivos que el desarrollador combina con la plantilla HTML correspondiente al tipo de documento (factura ordinaria, factura simplificada, factura rectificativa, certificado, recibo, presupuesto, modelo administrativo).

Con IronPDF, puedes agregar formas, texto, imágenes, encabezados y pies de página sin problemas. También tienes la flexibilidad de establecer la orientación del documento, tamaño y metadatos y exportar a varios estándares como PDF/UA y PDF/A. Además, integrar IronPDF en aplicaciones existentes para visualizar PDFs o imprimir documentos programáticamente es sencillo.

En este tutorial, exploraremos cada característica y mostraremos cómo IronPDF mejora la experiencia de desarrollo. Te permite crear componentes de código legibles y reutilizables que se pueden implementar en cualquier entorno y plataforma compatible.

Al final de este artículo, tendrás un sólido entendimiento de cómo crear PDFs estilísticos y únicos adaptados a tus necesidades con IronPDF.

Para comenzar a instalar IronPDF y seguir los ejemplos del tutorial descritos en este artículo, revisa esta guía de instalación rápida que te ayudará a configurar todo sin problemas.

Inicio rápido: crea tu primer PDF con IronPDF

Crea fácilmente tu primer PDF en C# usando IronPDF con solo unas pocas líneas de código. Esta guía rápida te muestra cómo inicializar un documento PDF, agregar contenido y guardarlo, asegurando un inicio sin problemas para los desarrolladores nuevos en la biblioteca. Sumérgete en la creación de PDFs en segundos y expande las capacidades de tu aplicación C# con facilidad.

  1. Instala IronPDF con el Administrador de Paquetes NuGet

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

    new IronPdf.PdfDocument(500, 500).SaveAs("output.pdf");
  3. Despliegue para probar en su entorno real

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

    arrow pointer

Tabla de contenido

Diseñe su PDF perfecto

Crear PDF en blanco

Crear un PDF en blanco con IronPDF es intuitivo y sencillo, requiriendo solo un par de líneas de código. Primero iniciamos una nueva clase PdfDocument, le proporcionamos dimensiones y llamamos al método SaveAs para guardarlo. TextHeaderFooter

:path=/static-assets/pdf/content-code-examples/how-to/create-new-pdfs.cs
using IronPdf;

PdfDocument pdf = new PdfDocument(270, 270);

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

Dim pdf As New PdfDocument(270, 270)

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

Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía de cómo hacerlo.

Añadir encabezados y pies de página

Agrega encabezados y pies de página en la parte superior o inferior de tu PDF fácilmente usando IronPDF. IronPDF te permite agregar dos tipos de encabezados y pies de página. TextHeaderFooter es ideal para escenarios donde solo se requiere texto, como mostrar el número de página con interpolación de cadenas, por ejemplo, "{page} of {total-pages}" HtmlHeaderFooter. Al mismo tiempo, HtmlHeaderFooter es una variación más avanzada que permite a los desarrolladores personalizar el contenido HTML que colocan.

Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía de cómo hacerlo.

Cabecera y pie de página HTML

Al configurar el objeto HtmlHeaderFooter <center>, podemos personalizar dónde aparece el texto envolviendo los números de página en etiquetas span y agregando un recurso de imagen para asegurar que el documento sea único.

: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

Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía de cómo hacerlo.

Cabecera y pie de página

El ejemplo a continuación utiliza TextHeaderFooter con valores de marcador de posición para denotar los números de página, URLs y fecha.

: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

Junto con los campos mostrados arriba, también tenemos los siguientes valores de marcador de posición que están disponibles y serán reemplazados al renderizar: {page}, {total-pages}, {url}, {date}, {time}, {html-title}, {pdf-title}.

Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía de cómo hacerlo.

Añadir números de página

Similar al ejemplo anterior, podemos usar TextHeaderFooter o HtmlHeaderFooter para mostrar el número de página colocando valores de marcador de posición en el encabezado o pie de página, que se mostrarán cuando se renderice el documento.

:path=/static-assets/pdf/content-code-examples/how-to/page-numbers-basic.cs
using IronPdf;

// Create text header
TextHeaderFooter textHeader = new TextHeaderFooter()
{
    CenterText = "{page} of {total-pages}"
};

// Create html footer
HtmlHeaderFooter htmlFooter = new HtmlHeaderFooter()
{
    HtmlFragment = "<center><i>{page} of {total-pages}<i></center>"
};

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

// Add header and footer
pdf.AddTextHeaders(textHeader);
pdf.AddHtmlFooters(htmlFooter);

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

' Create text header
Private textHeader As New TextHeaderFooter() With {.CenterText = "{page} of {total-pages}"}

' Create html footer
Private htmlFooter As New HtmlHeaderFooter() With {.HtmlFragment = "<center><i>{page} of {total-pages}<i></center>"}

' Render a new PDF
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Hello World!</h1>")

' Add header and footer
pdf.AddTextHeaders(textHeader)
pdf.AddHtmlFooters(htmlFooter)

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

Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía de cómo hacerlo.

Incorporar imágenes con DataURI

Hay ocasiones en las que depender de un directorio de recursos es demasiado lento e ineficaz; por lo tanto, podemos incrustar imágenes con Data URIs como una solución alternativa. Aquí hay un breve fragmento de código sobre cómo hacerlo.

:path=/static-assets/pdf/content-code-examples/how-to/datauris-image.cs
using IronPdf;
using System;

// Read byte from image file
var pngBinaryData = System.IO.File.ReadAllBytes("My_image.png");

// Convert bytes to base64
var ImgDataURI = @"data:image/png;base64," + Convert.ToBase64String(pngBinaryData);

// Import base64 to img tag
var ImgHtml = $"<img src='{ImgDataURI}'>";

ChromePdfRenderer Renderer = new ChromePdfRenderer();

// Render the HTML string
var pdf = Renderer.RenderHtmlAsPdf(ImgHtml);

pdf.SaveAs("datauri_example.pdf");
Imports IronPdf
Imports System

' Read byte from image file
Private pngBinaryData = System.IO.File.ReadAllBytes("My_image.png")

' Convert bytes to base64
Private ImgDataURI = "data:image/png;base64," & Convert.ToBase64String(pngBinaryData)

' Import base64 to img tag
Private ImgHtml = $"<img src='{ImgDataURI}'>"

Private Renderer As New ChromePdfRenderer()

' Render the HTML string
Private pdf = Renderer.RenderHtmlAsPdf(ImgHtml)

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

Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía de cómo hacerlo.

OpenAI para PDF

IronPDF mejora la eficiencia y escalabilidad al soportar el modelo OpenAI para una rápida resumación, consulta y memorización, todo utilizando Microsoft Semantic Kernel. Aquí hay un breve fragmento de código sobre cómo usar OpenAI para resumir rápidamente los contenidos de un PDF.

:path=/static-assets/pdf/content-code-examples/how-to/openai-summarize.cs
using IronPdf;
using IronPdf.AI;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Memory;
using System;
using System.Threading.Tasks;

// Setup OpenAI
var azureEndpoint = "<<enter your azure endpoint here>>";
var apiKey = "<<enter your azure API key here>>";
var builder = Kernel.CreateBuilder()
    .AddAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey)
    .AddAzureOpenAIChatCompletion("oaichat", azureEndpoint, apiKey);
var kernel = builder.Build();

// Setup Memory
var memory_builder = new MemoryBuilder()
    // optionally use new ChromaMemoryStore("http://127.0.0.1:8000") (see https://github.com/microsoft/semantic-kernel/blob/main/dotnet/notebooks/09-memory-with-chroma.ipynb)
    .WithMemoryStore(new VolatileMemoryStore())
    .WithAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey);
var memory = memory_builder.Build();

// Initialize IronAI
IronDocumentAI.Initialize(kernel, memory);

License.LicenseKey = "<<enter your IronPdf license key here";

// Import PDF document
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Summarize the document
Console.WriteLine("Please wait while I summarize the document...");
string summary = await pdf.Summarize(); // optionally pass AI instance or use AI instance directly
Console.WriteLine($"Document summary: {summary}\n\n");
Imports Microsoft.VisualBasic
Imports IronPdf
Imports IronPdf.AI
Imports Microsoft.SemanticKernel
Imports Microsoft.SemanticKernel.Connectors.OpenAI
Imports Microsoft.SemanticKernel.Memory
Imports System
Imports System.Threading.Tasks

' Setup OpenAI
Private azureEndpoint = "<<enter your azure endpoint here>>"
Private apiKey = "<<enter your azure API key here>>"
Private builder = Kernel.CreateBuilder().AddAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey).AddAzureOpenAIChatCompletion("oaichat", azureEndpoint, apiKey)
Private kernel = builder.Build()

' Setup Memory
Private memory_builder = (New MemoryBuilder()).WithMemoryStore(New VolatileMemoryStore()).WithAzureOpenAITextEmbeddingGeneration("oaiembed", azureEndpoint, apiKey)
Private memory = memory_builder.Build()

' Initialize IronAI
IronDocumentAI.Initialize(kernel, memory)

License.LicenseKey = "<<enter your IronPdf license key here"

' Import PDF document
Dim pdf As PdfDocument = PdfDocument.FromFile("wikipedia.pdf")

' Summarize the document
Console.WriteLine("Please wait while I summarize the document...")
Dim summary As String = Await pdf.Summarize() ' optionally pass AI instance or use AI instance directly
Console.WriteLine($"Document summary: {summary}" & vbLf & vbLf)
$vbLabelText   $csharpLabel

Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía de cómo hacerlo.

Personalización completa de PDF

Orientación y rotación

Orientación

La propiedad PaperOrientation de la clase RenderingOptions te permite dictar cómo se representa la orientación del PDF. En este ejemplo, lo establecemos en PdfPaperOrientation.Landscape para representar la orientación del PDF en modo horizontal.

:path=/static-assets/pdf/content-code-examples/tutorials/csharp-create-pdf-complete-1.cs

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Change paper orientation
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;

PdfDocument pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");

pdf.SaveAs("landscape.pdf");
Dim renderer As New ChromePdfRenderer()

' Change paper orientation
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape

Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page")

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

Rotación

Para establecer la rotación de una página PDF, podemos usar el método SetPageRotation junto con un enum PdfPageRotation como entrada, para rotar la página.

:path=/static-assets/pdf/content-code-examples/how-to/page-orientation-rotation-set-rotation.cs
using IronPdf;
using IronPdf.Rendering;
using System.Collections.Generic;

PdfDocument pdf = PdfDocument.FromFile("landscape.pdf");

// Set all pages
pdf.SetAllPageRotations(PdfPageRotation.Clockwise90);

// Set a single page
pdf.SetPageRotation(1, PdfPageRotation.Clockwise180);

// Set multiple pages
List<int> selectedPages = new List<int>() { 0, 3 };
pdf.SetPageRotations(selectedPages, PdfPageRotation.Clockwise270);

pdf.SaveAs("rotatedLandscape.pdf");
Imports IronPdf
Imports IronPdf.Rendering
Imports System.Collections.Generic

Private pdf As PdfDocument = PdfDocument.FromFile("landscape.pdf")

' Set all pages
pdf.SetAllPageRotations(PdfPageRotation.Clockwise90)

' Set a single page
pdf.SetPageRotation(1, PdfPageRotation.Clockwise180)

' Set multiple pages
Dim selectedPages As New List(Of Integer)() From {0, 3}
pdf.SetPageRotations(selectedPages, PdfPageRotation.Clockwise270)

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

Para una explicación más detallada de la configuración de la orientación y rotación del PDF y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía de cómo hacerlo.

Tamaño de papel personalizado

Establece las dimensiones del PDF configurando width y height usando el método SetCustomPaperSizeinCentimeters. IronPDF también admite configuraciones a tamaños estandarizados como A4 configurando la propiedad PaperSize a una lista de enums disponibles.

Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía de cómo hacerlo.

Tamaño de papel personalizado en Cm

:path=/static-assets/pdf/content-code-examples/how-to/custom-paper-size-cm.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Set custom paper size in cm
renderer.RenderingOptions.SetCustomPaperSizeinCentimeters(15, 15);

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Custom Paper Size</h1>");

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

Private renderer As New ChromePdfRenderer()

' Set custom paper size in cm
renderer.RenderingOptions.SetCustomPaperSizeinCentimeters(15, 15)

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Custom Paper Size</h1>")

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

Tamaño estándar del papel

En este ejemplo, también establecemos la propiedad PaperSize al enum de PdfPaperSize.A4.

:path=/static-assets/pdf/content-code-examples/how-to/custom-paper-size-standard-paper-size.cs
using IronPdf;
using IronPdf.Rendering;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Set paper size to A4
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Standard Paper Size</h1>");

pdf.SaveAs("standardPaperSize.pdf");
Imports IronPdf
Imports IronPdf.Rendering

Private renderer As New ChromePdfRenderer()

' Set paper size to A4
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Standard Paper Size</h1>")

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

Para una lista de tamaños estandarizados compatibles, por favor haz clic aquí.

Cumplimiento de normas

Export PDF/A Format Docs in C

Crea y exporta PDFs compatibles con los estándares PDF/UA utilizando el método SaveAsPdfUA.

:path=/static-assets/pdf/content-code-examples/how-to/pdfa-fromfile.cs
using IronPdf;

// Create a PdfDocument object or open any PDF File
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3b);
Imports IronPdf

' Create a PdfDocument object or open any PDF File
Private pdf As PdfDocument = PdfDocument.FromFile("wikipedia.pdf")

' Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3b)
$vbLabelText   $csharpLabel

Para una explicación más detallada de este fragmento de código y para explorar su funcionalidad adicional, por favor consulta nuestra exhaustiva guía de cómo hacerlo.

Export PDF/UA Format Docs in C

Para convertir PDF a PDF/A en C#, también podemos usar la biblioteca IronPDF, que soporta los estándares más recientes de PDF/A, garantizando la integridad de tus archivos; similar al ejemplo anterior, llamamos a SaveAsPdfA para guardar el PDF conforme a los estándares PDF/A.

:path=/static-assets/pdf/content-code-examples/how-to/pdfua-fromfile.cs
using IronPdf;

// Open PDF File
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Export as PDF/UA compliance PDF
pdf.SaveAsPdfUA("pdf-ua-wikipedia.pdf");
Imports IronPdf

' Open PDF File
Dim pdf As PdfDocument = PdfDocument.FromFile("wikipedia.pdf")

' Export as PDF/UA compliance PDF
pdf.SaveAsPdfUA("pdf-ua-wikipedia.pdf")
$vbLabelText   $csharpLabel

En este ejemplo, guardamos el PDF en la variación PDF/A-3, usando el enum para PdfAVersions.

Para una lista completa de versiones de PDF/A compatibles, por favor haz clic aquí.

Creación de documentos comerciales españoles

Las particularidades formales del mercado ibérico que conviene contemplar al crear PDFs en C# para el contexto español:

Tipografía y formato numérico ibérico

La convención numérica española usa coma como separador decimal y punto como separador de miles — exactamente al revés que la convención angloamericana. Para garantizar formato correcto en el PDF generado, configure la cultura del proceso de renderizado a es-ES:

using System.Globalization;
using IronPdf;

// Establecer cultura ibérica para que los importes se formateen con
// coma decimal y punto miles (1.234,56 €).
var cultura = new CultureInfo("es-ES");
var importeFormateado = (1234.56m).ToString("C", cultura);  // "1.234,56 €"

// Renderizar con la cultura aplicada al HTML
var html = $"<p>Total: {importeFormateado}</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("factura-formato-iberico.pdf");
using System.Globalization;
using IronPdf;

// Establecer cultura ibérica para que los importes se formateen con
// coma decimal y punto miles (1.234,56 €).
var cultura = new CultureInfo("es-ES");
var importeFormateado = (1234.56m).ToString("C", cultura);  // "1.234,56 €"

// Renderizar con la cultura aplicada al HTML
var html = $"<p>Total: {importeFormateado}</p>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("factura-formato-iberico.pdf");
Imports System.Globalization
Imports IronPdf

' Establecer cultura ibérica para que los importes se formateen con
' coma decimal y punto miles (1.234,56 €).
Dim cultura As New CultureInfo("es-ES")
Dim importeFormateado As String = (1234.56D).ToString("C", cultura)  ' "1.234,56 €"

' Renderizar con la cultura aplicada al HTML
Dim html As String = $"<p>Total: {importeFormateado}</p>"
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("factura-formato-iberico.pdf")
$vbLabelText   $csharpLabel

El símbolo € debe colocarse postfijo con espacio fino según la convención ibérica (1.234,56 €), no prefijo a la europea o angloamericana (€1,234.56). Para fechas, el formato es DD/MM/YYYY (19/05/2026), no MM/DD/YYYY ni YYYY-MM-DD salvo en contextos técnicos donde ISO 8601 es preferible.

Cabecera de factura con NIF, razón social y dirección fiscal

Una factura conforme con el ordenamiento ibérico debe incluir en la cabecera:

  • Razón social completa del emisor (incluida la forma jurídica: S.L., S.A., S.A.U., S.L.U., C.B., S.C.)
  • NIF del emisor (8 dígitos + letra para persona física, letra + 7 dígitos + control para entidades, X/Y/Z + 7 dígitos + letra para residentes extranjeros)
  • Dirección fiscal completa con código postal de cinco dígitos
  • Número de factura conforme con la convención {serie}/{ejercicio}/{secuencial} — por ejemplo A/2026/00237
  • Fecha de emisión y, opcionalmente, fecha de operación si difiere
  • Datos del receptor: razón social, NIF, dirección fiscal

Para flujos bajo VeriFactu (RDL 15/2025, vigente desde 1 ene 2027 para Impuesto de Sociedades / 1 jul 2027 resto), debe añadirse adicionalmente:

  • Código QR de la AEAT con el payload de verificación
  • *Leyenda mandatoria `VERIFACTU** (con asterisco en el medio, preservado verbatim) o alternativamenteFactura verificable en la sede electrónica de la AEAT`
  • Identificador del registro de facturación que enlaza con la huella encadenada del libro de eventos VeriFactu

Para flujos bajo TicketBAI en territorio foral vasco (Bizkaia, Gipuzkoa, Araba), el ticket lleva su propio QR foral y la leyenda específica de la Diputación Foral correspondiente, además del QR AEAT. El detalle completo se cubre en el tutorial Generación de facturas en C# .NET para VeriFactu, TicketBAI y Facturae.

Modelos AEAT, certificados y documentación administrativa

Para crear modelos administrativos (Modelo 303, 390, 347, 720), certificados (asistencia, formación, antigüedad, residencia), o documentación del sector público bajo Esquema Nacional de Interoperabilidad, IronPDF se combina con plantillas HTML que respetan:

  • Sello corporativo o de organismo, embebido como imagen o como SVG inline
  • Espacio reservado para firma manuscrita (en flujos no digitales) o campo de firma electrónica AcroForm (en flujos digitales con certificado FNMT-RCM)
  • Pie de página con identificación del organismo emisor, dirección de la sede electrónica, código CSV (si aplica) y URL de verificación
  • Conformidad PDF/A-2b para documentos archivables, o PDF/A-3a para documentos accesibles bajo Real Decreto 1112/2018

Conformidad LOPDGDD para PDFs con datos personales

Cuando el PDF contiene datos personales del ciudadano (datos identificativos, datos sanitarios bajo Ley 41/2002, datos financieros), aplique las medidas técnicas LOPDGDD: cifrado AES-256 (cubierto en detalle en Seguridad PDF en C# bajo LOPDGDD), almacenamiento on-premise sin envío a servicios externos durante la generación, y trazabilidad de acceso para auditorías AEPD.


Conclusión

Los breves ejemplos compartidos anteriormente muestran las impresionantes capacidades y características destacadas que puedes desbloquear al crear PDFs usando IronPDF, con énfasis específico en las convenciones documentales españolas y en los flujos del mercado ibérico (facturación VeriFactu/TicketBAI, modelos AEAT, certificados administrativos bajo ENI).

Si deseas solicitar una función o tienes preguntas generales sobre IronPDF o licencias, por favor contacta a nuestro equipo de soporte. Estaremos más que felices de asistirte.

Preguntas Frecuentes

¿Cómo puedo crear un documento PDF en C# usando IronPDF?

Puede crear un documento PDF en C# usando IronPDF al inicializar un nuevo objeto de documento PDF y agregar contenido como texto, imágenes y tablas antes de guardar el archivo.

¿Qué funcionalidades ofrece IronPDF para editar PDFs?

IronPDF proporciona funcionalidades para editar PDFs, incluyendo la adición de marcas de agua, encabezados, pies de página y fondos. También admite la fusión, división y compresión de PDFs.

¿Puedo agregar formularios a un documento PDF usando IronPDF?

Sí, IronPDF le permite agregar formularios interactivos a sus documentos PDF. Puede crear campos de formulario como entradas de texto, casillas de verificación y botones de opción.

¿Es posible proteger un PDF con una contraseña usando IronPDF?

Absolutamente, puede proteger sus documentos PDF con contraseñas usando IronPDF. Le permite establecer contraseñas de usuario y de propietario para controlar el acceso y los permisos.

¿Cómo aplico una marca de agua a un PDF usando IronPDF?

Para aplicar una marca de agua usando IronPDF, puede utilizar las funciones de edición de PDF para superponer texto o una imagen como marca de agua en cada página de su documento PDF.

¿Puede IronPDF comprimir archivos PDF para reducir su tamaño?

Sí, el método CompressAndSaveAs de IronPDF comprime imágenes incrustadas y opcionalmente puede eliminar el árbol de estructura del PDF, reduciendo el tamaño del archivo mientras mantiene la calidad. Simplemente llame a CompressAndSaveAs(outputPath, quality, removeStructureTree) para comprimir y guardar en un solo paso.

¿Cómo puedo agregar encabezados y pies de página a mi PDF usando IronPDF?

Puede agregar encabezados y pies de página a sus documentos PDF con IronPDF especificando el texto o las imágenes que desea incluir en la parte superior o inferior de cada página.

¿IronPDF admite la personalización del fondo para las páginas PDF?

IronPDF admite la personalización del fondo, permitiéndole establecer imágenes o colores como fondo para sus páginas PDF, mejorando el diseño del documento.

¿Puedo convertir HTML a PDF usando IronPDF?

Sí, IronPDF proporciona una función para convertir HTML a PDF. Puede renderizar contenido HTML complejo, incluyendo CSS y JavaScript, en un documento PDF.

¿Cuáles son los requisitos del sistema para usar IronPDF en un proyecto C#?

IronPDF es compatible con .NET Framework y .NET Core. Requiere un sistema operativo Windows, macOS o Linux, y se integra sin problemas en proyectos C# usando Visual Studio.

¿IronPDF es totalmente compatible con .NET 10?

Sí, IronPDF es totalmente compatible con .NET 10. Funciona de inmediato con el entorno de ejecución más reciente, aprovechando las mejoras de rendimiento y del lenguaje de .NET 10. Es compatible con las versiones 10, 9, 8, 7, 6 y 5 de .NET, .NET Standard 2.0+ y .NET Framework 4.6.2+ en entornos Windows, macOS, Linux y contenedores.

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 18,918,602 | 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.