我正在嘗試用阿拉伯語列印這個詞
????
我嘗試了很多字體,但 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")
如果我不使用阿拉伯語整形器,結果就是
輸入的單詞不正確。
結果是這個盒子
uj5u.com熱心網友回復:
我認為解決方案是這樣的:
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 Vu Sans Condensed 中確實有效。
之所以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://www.uj5u.com/caozuo/447049.html
