Crear PDFs en C# con convenciones españolas: facturas, certificados, modelos
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.
-
Instala IronPDF con el Administrador de Paquetes NuGet
PM > Install-Package IronPdf -
Copie y ejecute este fragmento de código.
new IronPdf.PdfDocument(500, 500).SaveAs("output.pdf"); -
Despliegue para probar en su entorno real
Comienza a usar IronPDF en tu proyecto hoy mismo con una prueba gratuita
Tabla de contenido
- Diseña PDFs Perfectos
- Crear PDF en Blanco
- Agregar Encabezados & Pies de Página
- Agregar Números de Página
- Incrustar Imágenes con DataURIs
- Incrustar Imágenes desde Azure Blob Storage
- OpenAI para PDF
- Personalización Total del PDF Fácil
- Orientación & Rotación
- Tamaño de Papel Personalizado
- Conformidad con los Estándares
- Exportar Documentos en Formato PDF/A en C#
- Exportar Documentos en Formato PDF/UA en C#
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")
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)
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")
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")
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")
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)
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")
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")
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")
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")
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)
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")
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")
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 ejemploA/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
huellaencadenada 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.

