Comparaison des bibliothèques PDF C# : IronPDF vs iText 7, PDFSharp, Aspose, Syncfusion, QuestPDF & plus
Le travail ici est la précision, pas la conversion. C'est ce qui empêche le texte japonais, arabe ou thaï de devenir des boîtes vides ou un charabia mojibake dans un PDF généré. Parce que IronPDF utilise le moteur Chrome, tout caractère qui s'affiche correctement dans un navigateur Chrome s'affiche correctement dans le PDF. Le mécanisme est simple : définissez RenderingOptions.InputEncoding sur UTF-8 et déclarez le charset dans le HTML, afin que le moteur et le document s'accordent sur la manière de lire les octets.
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")Documents multilingues et localisés
C'est le cas de tous les jours. IronPDF rend des écritures non latines y compris le chinois, le japonais, l'arabe, l'hébreu, le russe, et le thaï, ainsi que toutes les autres langues Unicode. Toute application produisant des factures, des relevés ou des lettres dans la langue du client dépend de cela pour un rendu lisible.
Écritures de droite à gauche et complexes
Les langues s'écrivant de droite à gauche comme l'arabe et l'hébreu sont prises en charge par le moteur, y compris le texte bidirectionnel et la formation contextuelle des lettres. C'est réellement difficile à faire correctement à la main, donc s'appuyer sur le moteur de texte du navigateur élimine toute une catégorie de bugs de mise en page.
Un document, plusieurs langues
Les documents multilingues sont pris en charge, donc un seul PDF peut contenir plusieurs écritures à la fois : un contrat bilingue ou une fiche produit avec des traductions parallèles. L'exemple de la page rend ensemble le japonais, l'arabe et le thaï.
Symboles spéciaux et entrées arbitraires
Au-delà des langues complètes, UTF-8 couvre les signes monétaires, les symboles mathématiques et les caractères européens accentués, donc un document mélangeant €, £, ¥ et des noms accentués s'affiche fidèlement. Cela compte surtout lorsque le texte provient d'une base de données, d'une API ou de soumissions utilisateur : vous contrôlez rarement la langue des données, seulement le codage.
Généralement la police, pas l'encodage
L'encodage indique au moteur comment lire les octets. La police décide si le glyphe existe. Un UTF-8 correct couplé avec une police qui manque de glyphes CJK ou arabes produit toujours des boîtes vides. Le codage n'a jamais été le problème ; la police manquante l'était.
La solution fiable est de spécifier une police web en CSS, ce que IronPDF prend entièrement en charge :
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")C'est vraiment un problème de déploiement déguisé. Cela fonctionne sur votre machine, qui a les polices, et échoue dans un conteneur Linux allégé ou une fonction sans serveur, qui n'en a pas. Si le texte international s'affiche localement mais se transforme en boîtes une fois déployé, suspectez la police avant l'encodage. Une police web intégrée, ou l'installation de la police sur le serveur, résout le problème.

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.