Comparación de bibliotecas PDF para C# en España: VeriFactu, AGPL y AEAT
El trabajo aquí es la corrección, no la conversión. Es lo que evita que el texto en japonés, árabe o tailandés se convierta en cuadros vacíos o mojibake distorsionado en un PDF generado. Porque IronPDF se basa en el motor de Chrome, cualquier carácter que se muestre correctamente en un navegador Chrome se mostrará correctamente en el PDF. El mecanismo es simple: establezca RenderingOptions.InputEncoding en UTF-8 y declare el charset en el HTML, de modo que el motor y el documento estén de acuerdo en cómo leer los bytes.
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.InputEncoding = System.Text.Encoding.UTF8;
var pdf = renderer.RenderHtmlAsPdf(
"<html><head><meta charset='utf-8'></head><body>こんにちは世界</body></html>");
pdf.SaveAs("utf8.pdf");Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.InputEncoding = System.Text.Encoding.UTF8
Dim pdf = renderer.RenderHtmlAsPdf("<html><head><meta charset='utf-8'></head><body>こんにちは世界</body></html>")
pdf.SaveAs("utf8.pdf")Documentos multilingües y localizados
Este es el caso cotidiano. IronPDF renderiza escrituras no latinas, incluyendo chino, japonés, árabe, hebreo, ruso y tailandés, además de cualquier otro idioma Unicode. Cualquier aplicación que genere facturas, declaraciones o cartas en el idioma del cliente depende de esto para un resultado que realmente se lea correctamente.
Escrituras de derecha a izquierda y complejas
Idiomas de derecha a izquierda como el árabe y el hebreo son manejados por el motor, incluyendo texto bidireccional y moldeado contextual de letras. Eso es realmente difícil de hacer bien de manera manual, por lo que apoyarse en el motor de texto del navegador elimina toda una categoría de errores de diseño.
Un documento, varios idiomas
Se soportan documentos de idiomas mixtos, por lo que un solo PDF puede contener múltiples escrituras a la vez: un contrato bilingüe, o una hoja de producto con traducciones paralelas. El ejemplo de la propia página renderiza japonés, árabe y tailandés juntos.
Símbolos especiales y entradas arbitrarias
Más allá de lenguajes completos, UTF-8 cubre símbolos de moneda, símbolos matemáticos y caracteres europeos acentuados, por lo que un documento que mezcle €, £, ¥, y nombres acentuados se renderiza fielmente. Esto importa más cuando el texto llega de una base de datos, una API, o envíos de usuarios: rara vez controlas el idioma de los datos, solo la codificación.
Usualmente la fuente, no la codificación
La codificación le dice al motor cómo leer los bytes. La fuente decide si el glifo existe. UTF-8 correcto emparejado con una fuente que carece de glifos CJK o árabes aún produce cuadros vacíos. La codificación nunca fue el problema; la tipografía faltante lo era.
La solución confiable es especificar una fuente web en CSS, lo cual IronPDF admite totalmente:
const string html =
"<html><head><meta charset='utf-8'>" +
"<style>body { font-family: 'Noto Sans JP', sans-serif; }</style>" +
"<link href='https://fonts.googleapis.com/css2?family=Noto+Sans+JP&display=swap' rel='stylesheet'>" +
"</head><body>こんにちは世界</body></html>";
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.InputEncoding = System.Text.Encoding.UTF8;
renderer.RenderHtmlAsPdf(html).SaveAs("utf8-webfont.pdf");Imports System.Text
Const html As String = "<html><head><meta charset='utf-8'>" &
"<style>body { font-family: 'Noto Sans JP', sans-serif; }</style>" &
"<link href='https://fonts.googleapis.com/css2?family=Noto+Sans+JP&display=swap' rel='stylesheet'>" &
"</head><body>こんにちは世界</body></html>"
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.InputEncoding = Encoding.UTF8
renderer.RenderHtmlAsPdf(html).SaveAs("utf8-webfont.pdf")Este es realmente un problema de implementación disfrazado. Funciona en tu máquina, que tiene las fuentes, y falla en un contenedor Linux reducido o función sin servidor, que no las tiene. Si el texto internacional se renderiza localmente pero se convierte en cuadros una vez implementado, sospecha de la fuente antes que de la codificación. Una fuente web incluida, o instalar la tipografía en el servidor, lo soluciona.

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 estructurados y visualmente atractivos.