UTF-8 en PDFs para el Español Ibérico: Facturae, VeriFactu y TicketBAI con IronPDF en C
IronPDF admite completamente la codificación UTF-8 y los caracteres Unicode en PDFs. Para el mercado español, la correcta implementación de UTF-8 tiene implicaciones técnicas que van más allá del soporte de idiomas internacionales: afecta directamente a la generación de documentos fiscales y de facturación.
Tres contextos normativos en España donde UTF-8 es obligatorio:
- VeriFactu XML: los registros de facturación de VeriFactu generados para la AEAT deben estar codificados en UTF-8. Una declaración de codificación incorrecta invalida el registro y puede activar el sistema de alertas de la AEAT.
- Facturae XML: el formato estándar de factura electrónica española declara explícitamente
encoding="UTF-8"en la cabecera XML. Los ISVs que generan PDFs sobre Facturae deben garantizar la coherencia entre la codificación del XML embebido y el contenido del PDF. - TicketBAI XML: cada hacienda foral (Bizkaia, Gipuzkoa, Araba) especifica UTF-8 como codificación obligatoria en su especificación técnica. Una codificación incorrecta en el XML TicketBAI provoca un error de validación en el portal foral correspondiente.
IronPDF admite UTF-8 en PDFs porque cumple con el estándar de Chrome: cualquier carácter que pueda renderizarse correctamente en un navegador Chrome es compatible con IronPDF.
Inicio rápido: Generar PDFs codificados en UTF-8 con IronPDF
Este ejemplo muestra cómo generar un PDF con codificación UTF-8. Al configurar InputEncoding a UTF-8 y usar el método RenderHtmlAsPdf, los desarrolladores garantizan la correcta representación de caracteres del español ibérico.
-
Instala IronPDF con el Administrador de Paquetes NuGet
PM > Install-Package IronPdf -
Copie y ejecute este fragmento de código.
// Initialize the Chrome PDF renderer var renderer = new IronPdf.ChromePdfRenderer(); // Set the input encoding to UTF-8 to support international characters renderer.RenderingOptions.InputEncoding = System.Text.Encoding.UTF8; // Render HTML containing Japanese text to PDF // Note: Always include meta charset='utf-8' in your HTML var pdf = renderer.RenderHtmlAsPdf("<html><head><meta charset='utf-8'></head><body>こんにちは世界</body></html>"); // Save the PDF with UTF-8 content pdf.SaveAs("utf8-example.pdf"); -
Despliegue para probar en su entorno real
Comienza a usar IronPDF en tu proyecto hoy mismo con una prueba gratuita
Flujo de trabajo mínimo (5 pasos)
- Descargue la biblioteca IronPDF C# para incrustar caracteres UTF-8 en archivos PDF
- Coloque caracteres UTF-8 en una cadena o fichero HTML
- Establezca la propiedad InputEncoding en Codificación UTF8
- Genere un PDF desde la cadena o fichero HTML con los métodos
RenderHtmlAsPdfyRenderHtmlFileAsPdf - Especifique la codificación en la etiqueta HTML meta
El español ibérico y los caracteres extendidos en PDFs
El español peninsular utiliza el juego de caracteres Latin-1 extendido: vocales acentuadas (á, é, í, ó, ú, ü), la eñe (ñ), los signos de interrogación y exclamación de apertura (¿, ¡) y el símbolo del euro (€). UTF-8 codifica todos estos caracteres correctamente, mientras que codificaciones más antiguas como ISO-8859-1 o Windows-1252 pueden provocar problemas de representación, especialmente en entornos Linux o Docker donde la codificación del sistema operativo puede diferir de Windows.
Una consideración práctica: el texto en español es entre un 15 % y un 30 % más largo que su equivalente en inglés. En documentos de facturación con campos de longitud fija —como los campos de descripción de línea en Facturae o los campos de texto en VeriFactu XML— esto puede provocar truncamiento si no se prevé el espacio adicional en el diseño del PDF.
El formato de números en España sigue el estándar europeo: separador de miles con punto y separador decimal con coma (1.234,56 €). Las fechas siguen el formato DD/MM/YYYY. Asegúrese de que las plantillas HTML que generan documentos fiscales en C# usen el formato regional correcto para evitar rechazos en la validación de la AEAT.
Ejemplo de PDF UTF-8 sencillo
// Example HTML content containing text in multiple languages
// Japanese, Arabic, and Thai text samples for demonstration
string htmlContent = @"
<p>周態告応立待太記行神正用真最。音日独素円政進任見引際初携食。更火識将回興継時億断保媛全職。
文造画念響竹都務済約記求生街東。天体無適立年保輪動元念足総地作靖権瀬内。
失文意芸野画美暮実刊切心。感変動技実視高療試意写表重車棟性作家薄井。
陸瓶右覧撃稿法真勤振局夘決。任堀記文市物第前兜純響限。囲石整成先尾未展退幹販山令手北結。</p>
<p>أم يذكر النفط قبضتهم على, الصين وفنلندا ما حدى. تم لكل أملا المنتصر,
٣٠ حدى مارد القوى. شرسة للسيطرة قامفي. حتى أم يطول المحيط,
زهاء وحلفاؤها من فعل. لم قامت الجو الساحلية وتم, ويعزى واقتصار قبل كل.</p>
<p>ภคนทลาพาธสตารเซฟต แชมป มารเกตตงลมเหลวโยเกรต แลนดบาบนอมครม รสโซ แบรนดไคลแมกซ พซซาโมเดลเสอโครง มอบโซนรายชอ
แอดมชชน ดอกเตอร พะเรอ มารคเจไดโมจราสเบอรร เอนทรานซออดชนศลปวฒนธรรมเปราะบาง โมจซเรยสวอลนตทรปลเมอร ทป วาไรตบกเมเปล</p>
";
// Example HTML content containing text in multiple languages
// Japanese, Arabic, and Thai text samples for demonstration
string htmlContent = @"
<p>周態告応立待太記行神正用真最。音日独素円政進任見引際初携食。更火識将回興継時億断保媛全職。
文造画念響竹都務済約記求生街東。天体無適立年保輪動元念足総地作靖権瀬内。
失文意芸野画美暮実刊切心。感変動技実視高療試意写表重車棟性作家薄井。
陸瓶右覧撃稿法真勤振局夘決。任堀記文市物第前兜純響限。囲石整成先尾未展退幹販山令手北結。</p>
<p>أم يذكر النفط قبضتهم على, الصين وفنلندا ما حدى. تم لكل أملا المنتصر,
٣٠ حدى مارد القوى. شرسة للسيطرة قامفي. حتى أم يطول المحيط,
زهاء وحلفاؤها من فعل. لم قامت الجو الساحلية وتم, ويعزى واقتصار قبل كل.</p>
<p>ภคนทลาพาธสตารเซฟต แชมป มารเกตตงลมเหลวโยเกรต แลนดบาบนอมครม รสโซ แบรนดไคลแมกซ พซซาโมเดลเสอโครง มอบโซนรายชอ
แอดมชชน ดอกเตอร พะเรอ มารคเจไดโมจราสเบอรร เอนทรานซออดชนศลปวฒนธรรมเปราะบาง โมจซเรยสวอลนตทรปลเมอร ทป วาไรตบกเมเปล</p>
";
:path=/static-assets/pdf/content-code-examples/how-to/utf-8.cs
using IronPdf;
const string html_with_utf_8 =
@"<p>周態告応立待太記行神正用真最。音日独素円政進任見引際初携食。更火識将回興継時億断保媛全職。
文造画念響竹都務済約記求生街東。天体無適立年保輪動元念足総地作靖権瀬内。
失文意芸野画美暮実刊切心。感変動技実視高療試意写表重車棟性作家薄井。
陸瓶右覧撃稿法真勤振局夘決。任堀記文市物第前兜純響限。囲石整成先尾未展退幹販山令手北結。</p>
<p>
أم يذكر النفط قبضتهم على, الصين وفنلندا ما حدى. تم لكل أملاً المنتصر,
٣٠ حدى مارد القوى. شرسة للسيطرة قامفي. حتى أم يطول المحيط,
زهاء وحلفاؤها من فعل. لم قامت الجو الساحلية وتم, ويعزى واقتصار قبل كل.
</p>
<p>
ภคันทลาพาธสตาร์เซฟตี้ แชมป์ มาร์เก็ตติ้งล้มเหลวโยเกิร์ต แลนด์บาบูนอึมครึม รุสโซ แบรนด์ไคลแม็กซ์ พิซซ่าโมเดลเสือโคร่ง ม็อบโซนรายชื่อ
แอดมิชชั่น ด็อกเตอร์ พะเรอ มาร์คเจไดโมจิราสเบอร์รี เอนทรานซ์ออดิชั่นศิลปวัฒนธรรมเปราะบาง โมจิซีเรียสวอลนัตทริปลีเมอร์ ทิป วาไรตี้บิ๊กเมเปิล
</p>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.InputEncoding = System.Text.Encoding.UTF8;
var pdf = renderer.RenderHtmlAsPdf(html_with_utf_8);
pdf.SaveAs("Unicode.pdf");
Imports IronPdf
Private Const html_with_utf_8 As String = "<p>周態告応立待太記行神正用真最。音日独素円政進任見引際初携食。更火識将回興継時億断保媛全職。
文造画念響竹都務済約記求生街東。天体無適立年保輪動元念足総地作靖権瀬内。
失文意芸野画美暮実刊切心。感変動技実視高療試意写表重車棟性作家薄井。
陸瓶右覧撃稿法真勤振局夘決。任堀記文市物第前兜純響限。囲石整成先尾未展退幹販山令手北結。</p>
<p>
أم يذكر النفط قبضتهم على, الصين وفنلندا ما حدى. تم لكل أملاً المنتصر,
٣٠ حدى مارد القوى. شرسة للسيطرة قامفي. حتى أم يطول المحيط,
زهاء وحلفاؤها من فعل. لم قامت الجو الساحلية وتم, ويعزى واقتصار قبل كل.
</p>
<p>
ภคันทลาพาธสตาร์เซฟตี้ แชมป์ มาร์เก็ตติ้งล้มเหลวโยเกิร์ต แลนด์บาบูนอึมครึม รุสโซ แบรนด์ไคลแม็กซ์ พิซซ่าโมเดลเสือโคร่ง ม็อบโซนรายชื่อ
แอดมิชชั่น ด็อกเตอร์ พะเรอ มาร์คเจไดโมจิราสเบอร์รี เอนทรานซ์ออดิชั่นศิลปวัฒนธรรมเปราะบาง โมจิซีเรียสวอลนัตทริปลีเมอร์ ทิป วาไรตี้บิ๊กเมเปิล
</p>"
Private renderer = New ChromePdfRenderer()
renderer.RenderingOptions.InputEncoding = System.Text.Encoding.UTF8
Dim pdf = renderer.RenderHtmlAsPdf(html_with_utf_8)
pdf.SaveAs("Unicode.pdf")
Este es el archivo producido por el código:
Para garantizar una codificación perfecta de su HTML como PDF, especifique el conjunto de caracteres en dos lugares:
- En
ChromePdfRenderer.RenderingOptionsusandoSystem.Text.Encoding.UTF8 - En su cabecera HTML:
<html>
<head>
<meta charset='utf-8'>
</head>
<body>
こんにちは世界
</body>
</html>
<html>
<head>
<meta charset='utf-8'>
</head>
<body>
こんにちは世界
</body>
</html>
UTF-8 en documentos fiscales: VeriFactu, Facturae y TicketBAI
VeriFactu XML y PDFs de factura
Los registros VeriFactu son documentos XML codificados en UTF-8 que se envían a la AEAT. Cuando IronPDF genera el PDF de la factura que acompaña al registro VeriFactu, debe usar la misma codificación UTF-8 para garantizar que los datos del PDF y del XML sean coherentes. Cualquier discrepancia puede ser detectada durante las comprobaciones de la AEAT (Factura verificable en la sede electrónica de la AEAT).
La leyenda obligatoria VERI*FACTU —preservar el asterisco— debe renderizarse correctamente en el PDF. Con UTF-8 configurado correctamente en IronPDF, el asterisk y todos los caracteres especiales se representan sin problemas.
Facturae XML embebido en PDF/A-3
Cuando se embebe un XML de Facturae en un PDF/A-3b (para envío B2G a través de FACe o B2B bajo Crea y Crece), el XML embebido tiene su propia declaración <?xml version="1.0" encoding="UTF-8"?>. IronPDF maneja correctamente la coexistencia de la codificación UTF-8 del PDF y del XML embebido a través de la clase EmbedFileConfiguration.
TicketBAI: tres forales, una codificación
Las especificaciones técnicas de TicketBAI en Bizkaia, Gipuzkoa y Araba especifican UTF-8 como codificación estándar del XML. Al generar los PDFs que acompañan a los registros TicketBAI en su sistema de facturación, IronPDF garantiza que los caracteres del español ibérico —especialmente la ñ, los acentos y los signos de apertura de interrogación/exclamación— se representen correctamente en el documento final.
Soporte lingüístico internacional
IronPDF admite HTML a PDF en idiomas con escritura no latina: chino, japonés, árabe, hebreo, ruso, tailandés y todos los idiomas admitidos por Unicode, incluidos documentos de idioma mixto.
Hay dos aspectos a considerar al trabajar con idiomas internacionales:
¿Qué tipografías son compatibles con mi juego de caracteres?
Un tipo de letra que soporte su juego de caracteres debe estar instalado en su servidor. Normalmente se instalan automáticamente en servidores web modernos. Para el español peninsular, las fuentes con soporte completo de Latin-1 (incluyendo ñ, ¿ y ¡) son esenciales.
Para implementaciones en la nube (Azure, AWS), puede ser necesario garantizar una instalación correcta de fuentes con soporte para caracteres ibéricos.
Una solución alternativa es especificar una fuente web en su CSS, como las proporcionadas por Google Fonts.
¿Cómo configuro la codificación de entrada correcta?
Es posible que deba especificar la codificación de entrada de su documento. Los métodos para garantizar la codificación correcta son:
Añadir una etiqueta HTML "Meta Charset":
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
Para escenarios avanzados con múltiples idiomas y diseños complejos, IronPDF ofrece amplias opciones de configuración, incluyendo orientación de página, márgenes y otros ajustes de renderizado.
¿Listo para ver qué más puede hacer? Consulte nuestra página de tutoriales: Características adicionales
Preguntas Frecuentes
¿Por qué es obligatorio UTF-8 en el XML de VeriFactu según los requisitos de la AEAT?
El Real Decreto-Ley 15/2025 y las especificaciones técnicas de VeriFactu de la AEAT exigen que los registros de facturación se transmitan en UTF-8. Esto garantiza que los caracteres del español ibérico (ñ, á, é, í, ó, ú, ü, ¿, ¡, €) se transmitan y almacenen correctamente en la sede electrónica de la AEAT. IronPDF genera el PDF de representación visual con la misma codificación, asegurando consistencia entre el XML del registro y el documento visible.
¿Qué codificación usa el XML de Facturae 3.2.2 y cómo afecta al PDF generado con IronPDF?
El estándar Facturae 3.2.2 permite tanto UTF-8 como ISO-8859-1 en la declaración XML. La AEAT y FACe recomiendan UTF-8. Al generar el PDF de representación visual con IronPDF, configure InputEncoding = UTF8 e incluya en la plantilla HTML para que la razón social, dirección y descripción de las líneas de la factura muestren los mismos caracteres que el XML Facturae firmado.
¿Qué diferencias de codificación existen entre las especificaciones TicketBAI de Bizkaia, Gipuzkoa y Araba?
Las tres haciendas forales vascas (Bizkaia/BATUZ, Gipuzkoa y Araba) exigen UTF-8 en los ficheros XML TicketBAI. Sin embargo, existen diferencias menores en los campos de descripción permitidos y la longitud máxima de cadenas. En todos los casos, IronPDF debe generar el PDF de representación con UTF-8 para que los textos en euskera (con k, tz, ts, x) y castellano se representen correctamente junto al código QR y el identificador del registro TicketBAI.
¿Cómo garantizo que los caracteres españoles en una factura PDF coinciden exactamente con el XML fiscal?
Use la misma fuente de datos para el XML y el PDF: serialize el objeto factura a XML Facturae/TicketBAI y a la plantilla HTML con el mismo objeto C# (o serialización JSON). Configure IronPDF con InputEncoding = UTF8. Valide que campos como razón social, CIF/NIF, dirección y descripción de conceptos muestran caracteres idénticos en ambos formatos. Esta consistencia es relevante para el no repudio ante inspecciones de la AEAT o las haciendas forales.
¿IronPDF representa correctamente el símbolo del euro (€) y los signos de interrogación y exclamación en español (¿, ¡) en los PDFs fiscales?
Sí. IronPDF usa el motor de renderizado de Chromium, que soporta completamente UTF-8 y el juego de caracteres del español ibérico, incluyendo €, ¿, ¡, ñ, ü y todos los acentos. Asegúrese de incluir en la plantilla HTML y de que la cadena C# esté codificada en UTF-8 antes de pasarla a RenderHtmlAsPdf. Los importes en euros y los textos legales de facturas VeriFactu, Facturae y TicketBAI se renderizarán correctamente.

