我正在进行一个项目,使用Python中的FPDF2在PDF文件上打印阿拉伯语单词。
但我在展示这种语言的原始方向时遇到了很多问题。
FPDF2以英语方向显示所有语言。
这就是你读英语的方法:
你应该这样读阿拉伯语
但是当我把上面的单词用阿拉伯语写出来时,我面临一个问题>
问题是FPDF像这样显示阿拉伯语:
1-税前折扣
2-总无
但我需要这样
1-总无
2-税前折扣
我用英语写的问题可以理解。
这是阿拉伯语的问题:
但为什么会出现这个问题?
因为FPDF2显示阿拉伯语就像它显示英语一样,它以相同的方向显示。
这是我的代码:
from fpdf import FPDF
import arabic_reshaper
def arabic(text):
if text.isascii():
return text
else:
reshaped_text = arabic_reshaper.reshape(text)
return reshaped_text[::-1]
pdf = FPDF()
pdf.add_page()
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=55)
pdf.set_margin(5.0)
with pdf.table(cell_fill_color=(200,200,200), cell_fill_mode="ALL", text_align="CENTER") as table:
names_row = table.row()
names_row.cell(text=arabic("الإجمالي بدون الضريبة قبل الخصم"))
pdf.set_fill_color(r=255,g=255,b=255)
row = table.row()
row.cell(text=str(5000))
pdf.output('final.pdf')
代码的结果:
当你必须将文本分隔成多行而不是一行时,问题就会出现。
我试过很多方法,但没有一个能让我接近。
谢谢.
1条答案
按热度按时间xqkwcwgp1#
为什么会发生这种情况的原因是FPDF当它想打破文本ot行它从左到右打破它像这样:
但是在阿拉伯语中,你应该从右到左将文本分成行,但是FPDF并没有这样做,它处理它就像它是一个英语文本一样,它从左到右像这样分割它:
这是FPDF库中的问题。
我是怎么解决这个问题的?
您应该编辑库本身,而不是如何将文本输入库。
那么如何编辑库?
当你把一个文本放到一个单元格内的表格中时,你使用了multi_cell来使这个文本自动被库打破。
然后你必须去的功能,它处理的multi_cell,并编辑它,当这个函数采取阿拉伯语它必须扭转行,并添加到单元格从下到上。
将它们添加到单元格之前的行将是这样的:
这是阿拉伯语的台词
现在,我们将fuces对林斯 * 名单林**,以解决我们的问题。
林斯列表
就像我们说的,你应该在将它们添加到最后一个单元格之前反转行列表,当你反转它们时,它们会像这样:
这就是理论上的解决方案。
但是我怎么能编辑功能multi_cell在FPDF当输入文本是英文的列表将像它是什么,但当输入文本是阿拉伯文的列表将被逆转,我们怎么能做到这一点?
为了解释一切,这将是困难的,但我会告诉你的代码,我添加在功能multi_cll做我想要的。
这是我在函数multi_cell中添加的代码:
这是我把它放在函数内部的地方,以便工作良好:
这是编辑的函数:
这就是一切谢谢