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

如何解决FPDF2中阿拉伯文排版方向异常的问题?

解决FPDF2中阿拉伯文RTL排版顺序颠倒问题

FPDF2原生不支持从右到左(RTL)语言的排版逻辑,仅靠arabic_reshaper重组字形后反转文本的方式,无法处理表格这类复杂布局中的文本顺序问题。结合python-bidi库处理双向文本方向,再配合正确的对齐设置,可彻底解决该问题。

步骤1:安装依赖

确保安装以下两个核心库:

pip install arabic-reshaper python-bidi

步骤2:修改代码逻辑

替换原有的arabic处理函数,结合字形重组与双向文本方向算法;同时调整表格文本对齐为右对齐:

from fpdf import FPDF
import arabic_reshaper
from bidi.algorithm import get_display

def arabic(text):
    if text.isascii():
        return text
    else:
        # 先重组阿拉伯文字形,再通过双向算法处理RTL显示顺序
        reshaped_text = arabic_reshaper.reshape(text)
        return get_display(reshaped_text)

pdf = FPDF()
pdf.add_page()
# 确认字体支持阿拉伯文,DejaVuSans可满足需求
pdf.add_font(family='DejaVu', style='', fname="DejaVuSans.ttf")
pdf.add_font(family='DejaVu', style='B', fname="DejaVuSans.ttf")
pdf.set_font(family='DejaVu', style='', size=16)  # 调整字号避免单元格溢出
pdf.set_margin(5.0)

with pdf.table(cell_fill_color=(200,200,200), cell_fill_mode="ALL") as table:
    names_row = table.row()
    # 阿拉伯文必须右对齐,指定align参数修正视觉布局
    names_row.cell(text=arabic("الإجمالي بدون الضريبة قبل الخصم"), align="RIGHT")

    pdf.set_fill_color(r=255,g=255,b=255)
    row = table.row()
    # 数字可同步设为右对齐,保持排版一致性
    row.cell(text=str(5000), align="RIGHT")

pdf.output('final.pdf')

关键说明

  • get_display函数会依据双向文本算法自动调整阿拉伯文的显示顺序,无需手动反转文本。
  • 阿拉伯文排版必须设置右对齐,否则即使文本顺序正确,视觉上仍会出现错位。
  • 若使用大字号,需检查单元格宽度是否足够容纳文本,避免自动换行引发的排版异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 05:16:24