You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iText7 C#打印阿拉伯语(RTL)PDF方向异常问题求助

解决iText7中阿拉伯语RTL方向显示错误的问题

我帮你排查下问题所在,顺便给你修正后的代码方案:你遇到的阿拉伯语反向显示问题,主要是两个核心原因——要么用的字体不支持阿拉伯语字符,要么没正确处理阿拉伯语特有的排版规则(毕竟它不仅是方向反转,还有连写、字形变换的需求)。

先纠正你代码里的小拼写错误(ParagrapgParagraphParagraphh明显是笔误),再给你完整的解决方案:

关键修复要点

  • 换用支持阿拉伯语的字体:Times字体默认没有阿拉伯语字形,建议用开源的Amiri字体,或者系统自带的阿拉伯语字体(比如Windows的Segoe UI Arabic、Mac的Al Nile
  • 正确应用RTL规则+阿拉伯语脚本处理:光设置BaseDirection不够,iText7需要专门处理阿拉伯语的连写和字形变换,得用ArabicScriptProcessor来预处理文本

修正后的完整代码示例

using iText.Kernel.Font;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
using iText.Text.Arabic; // 记得引入这个处理阿拉伯语的命名空间

void GenerateArabicPdf()
{
    // 1. 加载支持阿拉伯语的字体,这里以Amiri为例(需确保字体文件路径正确)
    string arabicFontPath = "path/to/amiri-regular.ttf";
    PdfFont arabicFont = PdfFontFactory.CreateFont(arabicFontPath, PdfEncodings.IDENTITY_H, true);

    // 2. 创建PDF文档实例
    using (PdfWriter writer = new PdfWriter("arabic_output.pdf"))
    using (PdfDocument pdf = new PdfDocument(writer))
    using (Document document = new Document(pdf))
    {
        // 3. 创建RTL方向的段落
        Paragraph arabicParagraph = new Paragraph()
            .SetFont(arabicFont)
            .SetBaseDirection(BaseDirection.RIGHT_TO_LEFT)
            .SetFontSize(14);

        // 4. 预处理阿拉伯语文本:处理连写、字形变换
        string originalArabicText = "مرحبا بالعالم"; // 示例阿拉伯语字符串
        string processedText = ArabicScriptProcessor.Process(originalArabicText);

        // 5. 将处理后的文本添加到段落
        arabicParagraph.Add(processedText);

        // 6. 把段落加入文档
        document.Add(arabicParagraph);
    }
}

额外提示

  • 如果想用系统自带字体,直接用字体名称创建即可:PdfFontFactory.CreateFont("Segoe UI Arabic", PdfEncodings.IDENTITY_H, true)
  • 确保安装了iText7的相关依赖包,比如itext7-arabic(专门处理阿拉伯语排版的包)
  • 不要直接添加未处理的阿拉伯语文本到Text元素,必须经过ArabicScriptProcessor处理,否则连写和字形都会显示异常

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

火山引擎 最新活动