Solución de problemas de CMYK y PDF en idiomas internacionales
IronPDF admite conversión de HTML a PDF en todos los idiomas internacionales soportados por Unicode, incluidos documentos de idiomas mixtos.
Dos puntos a considerar son Tipografías y Codificación de Entrada, que se explican en más detalle en esta página de FAQ: https://ironpdf.com/how-to/utf-8/
Un tipo de letra que soporte tu juego de caracteres debe estar instalado en tu servidor.
Es posible que tenga que especificar la codificación de entrada de su documento para renderizarlo correctamente.
Puede lograr esto de las siguientes maneras:
-
Añadiendo una etiqueta HTML 'Meta Charset'
Este método implica incluir una etiqueta
<meta>dentro de la sección<head>del HTML para definir el conjunto de caracteres. Esto asegura que su documento HTML use los caracteres correctos.<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Your Document Title</title> </head> <body> <p>Your document content goes here...</p> </body> </html><!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Your Document Title</title> </head> <body> <p>Your document content goes here...</p> </body> </html>HTMLLa etiqueta
<meta charset="UTF-8">especifica la codificación de caracteres UTF-8, que es capaz de manejar cualquier carácter Unicode. -
Configurando la propiedad inputEncoding de su convertidor HTML a PDF de IronPDF
Puede establecer la propiedad
inputEncodingde su convertidor IronPDF, lo que le permite especificar la codificación de caracteres durante el proceso de conversión.Esto se puede hacer en su código C# de la siguiente manera:
using IronPdf; class Program { static void Main() { // Instantiate a renderer var Renderer = new HtmlToPdf { // Set the input encoding to UTF-8 RenderOptions = new ChromePdfRendererOptions { InputEncoding = "UTF-8" } }; // Convert HTML to PDF var PDF = Renderer.RenderHtmlAsPdf("<p>Sample content with UTF-8 encoding</p>"); // Save the PDF to disk PDF.SaveAs("output.pdf"); } }using IronPdf; class Program { static void Main() { // Instantiate a renderer var Renderer = new HtmlToPdf { // Set the input encoding to UTF-8 RenderOptions = new ChromePdfRendererOptions { InputEncoding = "UTF-8" } }; // Convert HTML to PDF var PDF = Renderer.RenderHtmlAsPdf("<p>Sample content with UTF-8 encoding</p>"); // Save the PDF to disk PDF.SaveAs("output.pdf"); } }Imports IronPdf Friend Class Program Shared Sub Main() ' Instantiate a renderer Dim Renderer = New HtmlToPdf With { .RenderOptions = New ChromePdfRendererOptions With {.InputEncoding = "UTF-8"} } ' Convert HTML to PDF Dim PDF = Renderer.RenderHtmlAsPdf("<p>Sample content with UTF-8 encoding</p>") ' Save the PDF to disk PDF.SaveAs("output.pdf") End Sub End Class$vbLabelText $csharpLabelHtmlToPdf: Esta es una clase de la biblioteca IronPDF utilizada para convertir documentos HTML a PDF.RenderOptions.InputEncoding: Esta propiedad le permite establecer la codificación de los datos de entrada. Aquí, se establece en"UTF-8"para soportar idiomas internacionales.RenderHtmlAsPdf: Este método renderiza el contenido HTML dado en un formato PDF.SaveAs: Este método se utiliza para guardar el archivo PDF renderizado en una ruta de archivo especificada.
Por favor, lea más sobre la propiedad inputEncoding en la documentación de IronPDF: IronPdf.ChromePdfRenderOptions.inputEncoding
Codificación en documentos fiscales y legales españoles
La correcta configuración de codificación tiene especial relevancia para los desarrolladores españoles que generan documentos PDF en entornos de facturación y cumplimiento normativo.
UTF-8 y caracteres castellanos en documentos VeriFactu y Facturae
Los documentos fiscales españoles —facturas VeriFactu (reguladas por la AEAT), facturas Facturae (formato XML v3.2.2 obligatorio para el sector público a través de FACe) y registros del SII (Suministro Inmediato de Información)— contienen caracteres castellanos con tilde (á, é, í, ó, ú), eñe (ñ) y signos de apertura (¿, ¡). Cuando el HTML de origen proviene de un sistema de facturación heredado con codificación ISO 8859-1 (Windows-1252), es imprescindible configurar InputEncoding = "UTF-8" o convertir el HTML a UTF-8 antes de pasarlo a IronPDF para evitar caracteres corruptos en el PDF final.
Recomendación para sistemas heredados: Si su ERP o software de facturación genera HTML con codificación ISO 8859-1 y los caracteres castellanos aparecen corruptos en el PDF, convierta el HTML a UTF-8 antes de invocar IronPDF:
// Convert ISO 8859-1 encoded HTML to UTF-8 before rendering
string htmlIso = File.ReadAllText("factura.html", Encoding.Latin1);
string htmlUtf8 = htmlIso; // already re-encoded in memory as UTF-16 .NET string
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.InputEncoding = System.Text.Encoding.UTF8;
var pdf = renderer.RenderHtmlAsPdf(htmlUtf8);
pdf.SaveAs("factura-verifactu.pdf");
// Convert ISO 8859-1 encoded HTML to UTF-8 before rendering
string htmlIso = File.ReadAllText("factura.html", Encoding.Latin1);
string htmlUtf8 = htmlIso; // already re-encoded in memory as UTF-16 .NET string
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.InputEncoding = System.Text.Encoding.UTF8;
var pdf = renderer.RenderHtmlAsPdf(htmlUtf8);
pdf.SaveAs("factura-verifactu.pdf");
Imports System.IO
Imports System.Text
' Convert ISO 8859-1 encoded HTML to UTF-8 before rendering
Dim htmlIso As String = File.ReadAllText("factura.html", Encoding.Latin1)
Dim htmlUtf8 As String = htmlIso ' already re-encoded in memory as UTF-16 .NET string
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.InputEncoding = System.Text.Encoding.UTF8
Dim pdf = renderer.RenderHtmlAsPdf(htmlUtf8)
pdf.SaveAs("factura-verifactu.pdf")
Normalización NFC para tildes en documentos TicketBAI
El sistema TicketBAI, aplicado en los tres territorios forales vascos (Bizkaia, Gipuzkoa y Araba), requiere que el texto de la leyenda obligatoria del tique sea legible y esté correctamente codificado. En cadenas de texto procedentes de bases de datos o APIs externas, los caracteres acentuados pueden almacenarse en forma NFD (descompuesta) en lugar de NFC (compuesta), lo que puede causar diferencias visuales sutiles en el PDF. Normalice las cadenas a NFC antes de inyectarlas en el HTML:
using System.Text;
// Normalize to NFC before embedding in HTML template
string leyenda = "Factura emitida conforme a TicketBAI (Gipuzkoa)";
string leyendaNfc = leyenda.Normalize(NormalizationForm.FormC);
using System.Text;
// Normalize to NFC before embedding in HTML template
string leyenda = "Factura emitida conforme a TicketBAI (Gipuzkoa)";
string leyendaNfc = leyenda.Normalize(NormalizationForm.FormC);
Imports System.Text
' Normalize to NFC before embedding in HTML template
Dim leyenda As String = "Factura emitida conforme a TicketBAI (Gipuzkoa)"
Dim leyendaNfc As String = leyenda.Normalize(NormalizationForm.FormC)
LOPDGDD y codificación en documentos con datos personales
La LOPDGDD (Ley Orgánica de Protección de Datos y Garantía de Derechos Digitales) exige que los documentos con datos personales sean legibles e íntegros. Un PDF con caracteres corruptos por problemas de codificación puede incumplir el requisito de legibilidad. Configure siempre InputEncoding = "UTF-8" en IronPDF al generar documentos que contengan nombres, direcciones o cualquier otro dato personal en castellano.
Preguntas Frecuentes
¿Cómo evitar caracteres corruptos al generar PDFs VeriFactu o Facturae con IronPDF desde sistemas de facturación heredados con ISO 8859-1?
Si su sistema de facturación genera HTML con codificación ISO 8859-1 (Windows-1252), convierta el HTML a una cadena .NET (que usa UTF-16 internamente) antes de pasarlo a IronPDF y configure `RenderingOptions.InputEncoding = System.Text.Encoding.UTF8`. Esto garantiza que caracteres castellanos como á, é, ñ, ¿ y ¡ se representen correctamente en el PDF final de la factura VeriFactu o Facturae.
¿Es necesaria la normalización NFC para textos en castellano en documentos TicketBAI generados con IronPDF?
Sí. En sistemas donde las cadenas de texto provienen de bases de datos o APIs externas, los caracteres acentuados pueden estar en forma NFD (descompuesta). Normalice las cadenas a NFC usando `string.Normalize(NormalizationForm.FormC)` antes de inyectarlas en la plantilla HTML. Esto es especialmente importante para la leyenda obligatoria de los tiques TicketBAI en Bizkaia, Gipuzkoa y Araba, cuyo texto debe ser legible según los requisitos de cada hacienda foral.

