0

我需要创建一个混合了英语和阿拉伯语文本的 PDF,我可以使用下面的代码来做到这一点(从 Google Noto 字体下载 NotoSansArabic-Regular.ttf)。但问题是阿拉伯文本从左到右出现,但它应该从右到左出现。例如。它应该是 'مرحبا' 而不是 'ابحرم'。请有任何建议

下面是生成PDF的代码

from datetime import datetime
def getFileName():
    now=datetime.now()
    time = now.strftime('%d_%H_%M_%S')
    filename = "Test_UTF_"+time + ".pdf"
    return filename


from fpdf import FPDF

pdf = FPDF()
#Download NotoSansArabic-Regular.ttf from Google noto fonts
pdf.add_font("NotoSansArabic", style="", fname="./fonts/NotoSansArabic-Regular.ttf", uni=True)


pdf.add_page()

pdf.set_font('Arial', '', 12)
pdf.write(8, 'Hello World')
pdf.ln(8)

# مرحبا Marhaba in arabic 
pdf.set_font('NotoSansArabic', '', 12)
text = 'مرحبا'
pdf.write(8, text)
pdf.ln(8)

pdf.output(getFileName(), 'F')
4

1 回答 1

0

使用阿拉伯语 reshaper 和 bidi 的工作示例


    from datetime import datetime
    import arabic_reshaper
    from bidi.algorithm import get_display
    
    def getFileName():
        now=datetime.now()
        time = now.strftime('%d_%H_%M_%S')
        filename = "Test_UTF_"+time + ".pdf"
        return filename
    
    
    from fpdf import FPDF
    
    pdf = FPDF()
    #Download NotoSansArabic-Regular.ttf from Google noto fonts
    pdf.add_font("NotoSansArabic", style="", fname="./fonts/NotoSansArabic-Regular.ttf", uni=True)
    
    
    pdf.add_page()
    
    pdf.set_font('Arial', '', 12)
    pdf.write(8, 'Hello World')
    pdf.ln(8)
    
    # مرحبا Marhaba in arabic 
    pdf.set_font('NotoSansArabic', '', 12)
    text = 'مرحبا'
    
    pdf.write(8, text)
    pdf.ln(8)
    
    reshaped_text = arabic_reshaper.reshape(text)
    print(reshaped_text)
    
    bidi_text = get_display(reshaped_text)
    
    print(bidi_text)
    
    pdf.write(8, reshaped_text)
    pdf.ln(8)
    
    pdf.write(8, bidi_text)
    pdf.ln(8)
    
    pdf.output(getFileName(), 'F')

于 2021-09-20T05:46:31.377 回答