C# PDF库比较:IronPDF vs iText 7, PDFSharp, Aspose, Syncfusion, QuestPDF等
这里的工作重点是正确性,而不是转换。 这是为了防止日文、阿拉伯文或泰文在生成的PDF中变成空白方块或乱码。 因为IronPDF倚赖于Chrome引擎,任何在Chrome浏览器中正确显示的字符都能在PDF中正确显示。 机制很简单:将RenderingOptions.InputEncoding设置为UTF-8,并在HTML中声明字符集,以便引擎和文档在如何读取字节上达成一致。
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")
多语言和本地化文档
这是一种日常情况。 IronPDF可以呈现包括中文、日文、阿拉伯文、希伯来文、俄文和泰文在内的非拉丁文字,以及其他所有Unicode语言。 任何生成客户母语的发票、报表或信件的应用程序都依赖于此,以确保输出实际能够正确阅读。
从右到左和复杂的文本
从右到左的语言如阿拉伯文和希伯来文由引擎处理,包括双向文本和上下文字母形状。 这确实很难手工解决,所以依靠浏览器的文本引擎可以消除一整类布局错误。
一个文档,多种语言
支持混合语言的文档,因此单个PDF可以同时包含多个文字:如双语合同或带有平行翻译的产品页。 页面的样本将在一起呈现日文、阿拉伯文和泰文。
特殊符号和任意输入
超过完整语言的范围,UTF-8还涵盖了货币符号、数学符号和带重音的欧洲字符,因此混合€, £, ¥和带重音名字的文档可以准确呈现。 当文本来自数据库、API或用户提交时,这尤其重要:您很少能控制数据的语言,只能控制编码。
通常是字体问题,而不是编码问题
编码只是告诉引擎如何读取字节。 字体决定字形是否存在。 正确的UTF-8配上缺乏CJK或阿拉伯字形的字体仍然会产生空白方块。 编码从来不是问题; 丢失的字体才是。
可靠的解决方法是在CSS中指定一个网页字体,这一点IronPDF完全支持:
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")
这实际上是变相的部署问题。在您的机器上工作,因为您的机器有这些字体,而在简化版的Linux容器或无服务器功能中则失败,因为没有这些字体。 如果国际文本在本地呈现正常,但一旦部署后变成方块,怀疑字体而不是编码。 捆绑网页字体,或在服务器上安装字体就可以解决这个问题。
常见问题解答
如何在IronPDF中启用UTF-8文本渲染?
设置renderer.RenderingOptions.InputEncoding = System.Text.Encoding.UTF8并在HTML头中包含<meta charset='utf-8'>。这使得Chrome引擎和文档可以一致地解释字节流。
IronPDF支持从右到左的语言如阿拉伯语和希伯来语吗?
是的。IronPDF的Chrome引擎能够处理双向文本和RTL脚本的上下文字形构造,包括阿拉伯语和希伯来语,只需UTF-8编码和合适的字体,无需额外配置。
为什么我的PDF中显示空白方框而不是日语或阿拉伯语字符?
编码几乎肯定是正确的——问题出在字体。正确的UTF-8与缺乏CJK或阿拉伯字形的字体配对仍会产生空白方框。通过CSS指定覆盖所需脚本的Web字体(例如日语的Noto Sans JP),或在服务器上安装它。
IronPDF文档可以包含多种语言吗?
可以。IronPDF完全支持多语种文档。只要字体覆盖所有必需的Unicode区块,一个PDF可以同时渲染日语、阿拉伯语、泰语和欧洲文本。
为什么国际文本在我的机器上工作但在生产中显示为方框?
您的开发机器安装了系统字体。一个简化的Linux容器或无服务器函数通常没有。将所需的Web字体包含在您的HTML中或在服务器上安装字体。问题不在于编码,而是缺少字体。

