跳至页脚内容
产品比较

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")
$vbLabelText   $csharpLabel

多语言和本地化文档

这是一种日常情况。 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")
$vbLabelText   $csharpLabel

这实际上是变相的部署问题。在您的机器上工作,因为您的机器有这些字体,而在简化版的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中或在服务器上安装字体。问题不在于编码,而是缺少字体。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我