Windows下的pyfribidi或其他双向算法

4 投票
4 回答
3602 浏览
提问于 2025-04-16 18:23

我正在尝试使用reportlab生成一份报告,报告的语言是阿拉伯语。但是问题是,reportlab不支持双向显示(BIDI),因为Python缺少对双向算法的支持。经过大量搜索,我发现有一个名为Fribidi的工具,它是Gnome的一个包装器,还有一个叫PyFribidi的项目。但是这个项目只能在Linux上编译和运行,我尝试在Windows上使用mingw编译,但因为找不到很多Linux的库,编译失败了。

我的问题是,是否有在Windows上可以运行的Python中的Unicode双向算法实现?

谢谢。

4 个回答

1

python-bidi 是一个纯 Python 的接口,所以它应该可以在 Windows 上正常工作。

你需要使用 reportlab 的 RL 分支,并把所有对 pyfribidi 的调用改成对 python-bidi 的调用。这个链接可能对你有帮助 http://code.pediapress.com/wiki/wiki/RightToLeft

2

与此同时,我在Python中实现了阿拉伯文的排版处理:

https://github.com/behdad/pyarabicshaping

4

Python BiDi 是一个很棒的双向文本处理算法的实现,但它只支持双向显示(原样显示),并不能解决阿拉伯语的上下文形式问题。要解决这个上下文形式的问题,你需要将 python-bidi 模块和一个叫做 python-arabic-reshaper 的阿拉伯语重塑库一起使用。

举个例子: (来自 => http://mpcabd.igeex.biz/python-arabic-text-reshaper/)

import arabic_reshaper
from bidi.algorithm import get_display

#...
reshaped_text = arabic_reshaper.reshape(u'اللغة العربية رائعة')
bidi_text = get_display(reshaped_text)
pass_arabic_text_to_render(bidi_text)
#...

这个组合完美地解决了我的问题,而且这两个库都是纯 Python 实现的。

撰写回答