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

使用iText html2pdf实现HTML转PDF时阿拉伯文本反转问题如何解决?

解决方案

问题原因

iText默认未启用复杂脚本(包括阿拉伯语等RTL从右到左语言)的排版支持,仅配置CSS的direction: rtl和添加支持阿拉伯语的字体不足以完成正确排版:

  • 阿拉伯语字符需要做字形变形处理,同一字母在词首、词中、词尾写法不同,默认模式不会做该转换
  • 包含#等中性字符的双向文本没有经过双向算法(BIDI)处理,会出现顺序反转、符号位置错误的问题

操作步骤

步骤1:引入必要依赖

需要额外引入RTL排版支持包和ICU双向文本处理库,Maven坐标如下(版本需和你使用的iText主版本一致,以下为7.2.x版本示例):

<dependencies>
    <!-- iText html2pdf核心包 -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>html2pdf</artifactId>
        <version>7.2.5</version>
    </dependency>
    <!-- RTL语言支持扩展包 -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>html2pdf-rtl</artifactId>
        <version>7.2.5</version>
    </dependency>
    <!-- 双向文本处理依赖 -->
    <dependency>
        <groupId>com.ibm.icu</groupId>
        <artifactId>icu4j</artifactId>
        <version>72.1</version>
    </dependency>
</dependencies>

步骤2:修改转换配置

在原有转换代码的ConverterProperties配置中,开启复杂脚本支持即可:

@Test
public void convert() {
    File htmlFile = new File("/Users/scott/Downloads/pdf/test.html");
    File pdfFile = new File("/Users/scott/Downloads/pdf/test.pdf");

    try {
        PdfWriter writer = new PdfWriter(pdfFile.getPath());
        PdfDocument pdfDoc = new PdfDocument(writer);
        pdfDoc.setTagged();
        pdfDoc.setDefaultPageSize(PageSize.A4.rotate());

        ConverterProperties converterProperties = new ConverterProperties();
        converterProperties.setCharset(StandardCharsets.UTF_8.name());
        // 新增:开启复杂脚本排版支持,自动处理RTL语言和双向文本
        converterProperties.setComplexScriptFeaturesEnabled(true);
        FontProvider fontProvider = new DefaultFontProvider(false, false, false);
        fontProvider.addFont("/Users/scott/Downloads/pdf/Amiri-Regular.ttf");
        converterProperties.setFontProvider(fontProvider);

        HtmlConverter.convertToPdf(new FileInputStream(htmlFile), pdfDoc, converterProperties);
    } catch (IOException e) {
        log.error("Render PDF failed, ", e);
    }
}

可选优化:完善HTML声明

在HTML的根标签添加阿拉伯语语言声明,提升排版兼容性:

<html lang="ar">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:24:03