我正试图用阿拉伯文打印这个词。
الله
我试过很多种字体,但FPDF还是把它打印成盒子(豆腐盒,我猜就是它的名字)。
from fpdf import FPDF
import arabic_reshaper
pdf = FPDF('P', 'mm', "A4")
pdf.add_page()
pdf.add_font('dejavu', "", "DejaVuSansCondensed.ttf", uni=True)
pdf.set_font('dejavu', '', 10)
pdf.multi_cell(69, 5, arabic_reshaper.reshape("الله"), "", ln=1)
pdf.output("mypdf.pdf")
如果我不使用阿拉伯reshaper,结果是
这不是输入的正确单词。
结果就是这个盒子
发布于 2022-03-20 22:57:03
我认为解决办法是这样的:
from fpdf import FPDF
from arabic_reshaper import reshape
from bidi.algorithm import get_display
from warnings import filterwarnings
pdf = FPDF()
pdf.add_page()
pdf.add_font("NotoSansArabic", style="", fname="NotoSansArabic-Regular.ttf", uni=True)
pdf.set_font('NotoSansArabic', '', 10)
original_text = 'الله'
reshaped_text = reshape(original_text)
bidi_text = get_display(reshaped_text)
pdf.write(8, original_text)
pdf.ln(8)
pdf.write(8, reshaped_text)
pdf.ln(8)
pdf.write(8, bidi_text)
pdf.ln(8)
filterwarnings('ignore')
pdf.output('mypdf.pdf')
filterwarnings('default')
我无法让它与您提供的字体一起工作,但是这里使用的Google字体可以免费下载。似乎是'الله'
的某些部分导致了这个问题,因为类似于'مرحبا'
的东西在Deja凝聚中确实能工作。
filterwarnings("ignore")
之所以存在,是因为pdf.output
生成的警告似乎不会影响结果,但您可能希望查看它们,而不是仅仅忽略它们:
[..]\site-packages\fpdf\ttfonts.py:670: UserWarning: cmap value too big/small: -65241
warnings.warn("cmap value too big/small: %s" % cm)
然而,脚本现在似乎做你想做的,也显示了最初的外观和重塑的外观之前,修复方向。
您的问题不同,但我在这里找到了解决方案:Problem writing a mix of English and Arabic text in PDF using Python pyFPDF。这个警告也发生在Deja Vu中,所以它不是由特定的字体引起的。
https://stackoverflow.com/questions/71545989
复制相似问题