You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用iText在C#中将HTML转PDF时阿拉伯文本显示异常问题

解决iText HTML转PDF时阿拉伯文本断裂、反转的问题

关键修复点

  • 修正双向文本属性:将CSS中的unicode-bidi: isolate替换为unicode-bidi: embed,isolate属性在iText的HTML转换器中对阿拉伯文支持不足,embed能更好处理内嵌RTL文本的双向排版。
  • 移除隐藏属性:原代码中阿拉伯文本所在span设置了display:none,直接导致文本不渲染,必须移除该属性。
  • 指定字体编码:阿拉伯文属于复杂脚本,需使用IDENTITY_H编码加载字体,确保字形组合和方向处理正确。
  • 统一RTL上下文:给包含阿拉伯文本的父容器(如td)添加RTL方向设置,避免局部文本与全局布局冲突。

修正后的CSS

.arabic {
    direction: rtl;
    unicode-bidi: embed;
    font-family: 'NotoNaskhArabic', sans-serif;
}

@font-face {
    font-family: 'NotoNaskhArabic';
    src: url('C:/Users/fahad.a/Downloads/NotoNaskhArabic-Regular.ttf') format('truetype');
}

修正后的HTML片段

<td class="tdh arabic" style="font-family: 'NotoNaskhArabic', sans-serif;">
    Date<br>
    تاريخ الطلب
</td>

修正后的C#代码

ConverterProperties properties = new ConverterProperties();

FontProvider fontProvider = new FontProvider();
fontProvider.AddStandardPdfFonts();

// 加载阿拉伯字体时指定IDENTITY_H编码,支持复杂脚本排版
fontProvider.AddFont("C:/Users/fahad.a/Downloads/NotoNaskhArabic-Regular.ttf", PdfEncodings.IDENTITY_H);
fontProvider.AddFont("C:/Users/fahad.a/Downloads/NotoKufiArabic-Regular.ttf", PdfEncodings.IDENTITY_H);

properties.SetFontProvider(fontProvider);
properties.SetCharset("UTF-8");
properties.SetCssApplierFactory(new DefaultCssApplierFactory());

using (PdfWriter writer = new PdfWriter(destination, new WriterProperties().SetFullCompressionMode(true)))
using (PdfDocument pdfDocument = new PdfDocument(writer))
{
    HtmlConverter.ConvertToPdf(htmltrimmed, pdfDocument, properties);
}

额外提示

  • 确认字体文件路径绝对正确,避免因权限或路径错误导致字体加载失败。
  • 若仍存在字形断裂,可尝试更换为NotoNaskhArabic-Bold等字体,或检查HTML是否有未闭合标签破坏布局。
  • 多语言混合场景下,给不同语言文本块单独设置方向,确保双向文本算法正确识别排版规则。

内容的提问来源于stack exchange,提问作者fahad shaikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:31:14