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");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");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容器或无服务器功能中则失败,因为没有这些字体。 如果国际文本在本地呈现正常,但一旦部署后变成方块,怀疑字体而不是编码。 捆绑网页字体,或在服务器上安装字体就可以解决这个问题。

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