如何解决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
相关产品推荐
相关产品推荐

