Comparação de bibliotecas PDF em C#: IronPDF vs iText 7, PDFSharp, Aspose, Syncfusion, QuestPDF e muito mais
O trabalho aqui é precisão, não conversão. É o que impede que texto em japonês, árabe ou tailandês se tornem caixas vazias ou mojibake embaralhado em um PDF gerado. Como o IronPDF utiliza o mecanismo do Chrome, qualquer caractere que aparece corretamente em um navegador Chrome, aparece corretamente no PDF. O mecanismo é simples: defina RenderingOptions.InputEncoding para UTF-8 e declare o charset no HTML, para que o motor e o documento estejam de acordo sobre como ler os 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");
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 multilíngues e localizados
Este é o caso do dia a dia. O IronPDF renderiza scripts não latinos, incluindo chinês, japonês, árabe, hebraico, russo e tailandês, além de qualquer outra língua Unicode. Qualquer aplicativo que produza faturas, declarações ou cartas no idioma próprio do cliente depende disso para uma saída que seja realmente legível.
Scripts da direita para a esquerda e complexos
Idiomas da direita para a esquerda, como árabe e hebraico, são tratados pelo mecanismo, incluindo texto bidirecional e moldagem de letras contextuais. Isso é realmente difícil de acertar manualmente, então depender do mecanismo de texto do navegador elimina uma categoria inteira de bugs de layout.
Um documento, várias línguas
Documentos em línguas mistas são suportados, então um único PDF pode conter múltiplos scripts de uma vez: um contrato bilíngue ou uma ficha de produto com traduções paralelas. O exemplo da própria página renderiza japonês, árabe e tailandês juntos.
Símbolos especiais e entrada arbitrária
Além de idiomas completos, o UTF-8 cobre marcas de moeda, símbolos matemáticos e caracteres europeus acentuados, de modo que um documento misturando €, £, ¥ e nomes acentuados é renderizado fielmente. Isso é mais importante quando o texto chega de um banco de dados, uma API ou submissões de usuários: você raramente controla o idioma dos dados, apenas a codificação.
Normalmente a fonte, não a codificação
A codificação diz ao mecanismo como ler os bytes. A fonte decide se o glifo existe. UTF-8 correta emparelhada com uma fonte que não possui glifos CJK ou árabes ainda produz caixas vazias. A codificação nunca foi o problema; o tipo de letra ausente foi.
A correção confiável é especificar uma fonte web no CSS, o que o IronPDF suporta 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");
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")
Isso é realmente um problema de implantação disfarçado. Funciona na sua máquina, que tem as fontes, e falha em um container Linux minimalista ou função serverless, que não tem. Se o texto internacional renderiza localmente mas se transforma em caixas quando implantado, suspeite da fonte antes da codificação. Uma fonte web integrada, ou instalar o tipo de letra no servidor, resolve isso.
Perguntas frequentes
Como habilito a renderização de texto UTF-8 no IronPDF?
Defina renderer.RenderingOptions.InputEncoding = System.Text.Encoding.UTF8 e inclua <meta charset='utf-8'> no cabeçalho HTML. Isso alinha o mecanismo do Chrome e o documento sobre como interpretar o stream de bytes.
O IronPDF suporta idiomas da direita para a esquerda como árabe e hebraico?
Sim. O mecanismo Chrome do IronPDF lida com texto bidirecional e formatação de letras contextual para scripts RTL, incluindo árabe e hebraico, sem configuração adicional além da codificação UTF-8 e uma fonte apropriada.
Por que meu PDF mostra caixas vazias em vez de caracteres japoneses ou árabes?
A codificação quase certamente está configurada corretamente — o problema é a fonte. UTF-8 correto emparelhado com uma fonte que não possui glifos CJK ou árabes ainda produz caixas vazias. Especifique uma fonte web que cubra os scripts necessários (por exemplo, Noto Sans JP para japonês) via CSS ou instale-a no servidor.
Um único documento IronPDF pode conter vários idiomas?
Sim. Documentos de idioma misto são totalmente suportados. Um único PDF pode renderizar texto em japonês, árabe, tailandês e europeu juntos, desde que a fonte cubra todos os blocos Unicode necessários.
Por que o texto internacional funciona na minha máquina, mas mostra caixas em produção?
Sua máquina de desenvolvimento tem fontes do sistema instaladas. Um contêiner Linux simplificado ou função serverless geralmente não. Agrupe a fonte web necessária em seu HTML ou instale a fonte no servidor. A codificação não é o problema; a fonte ausente é.

