为了账号安全,请及时绑定邮箱和手机立即绑定

阿拉伯文字未正确包含在reportlab的可流动段落中

阿拉伯文字未正确包含在reportlab的可流动段落中

蛊毒传说 2021-03-30 21:02:11
假设我有这个阿拉伯语代码段:إذاأخذنابعينالإعتبارطبيعةتقلبالمناخوالمتغيراتالبينيةالسنويةوتلكعلطالمدىالطويلإضافةإلىت在英语中,这意味着:“如果我们考虑到气候变异性和年际变异性的本质,以及由于缺乏所使用的测量和计算的准确性而长期考虑的性质……。”现在,我想将其呈现为Reportlab PDF doc(python):arabic_text = u'إذا أخذنا بعين الإعتبار طبيعة تقلب المناخ و المتغيرات البينية السنوية و تلك على المدى الطويل إضافة إلى عدم دقة القياسات والحسابات المتبعة'arabic_text = arabic_reshaper.reshape(arabic_text) # join charactersarabic_text = get_display(arabic_text) # change orientation by using bidipdf_file=open('disclaimer.pdf','w')pdf_doc = SimpleDocTemplate(pdf_file, pagesize=A4)pdfmetrics.registerFont(TTFont('Arabic-normal', '../fonts/KacstOne.ttf'))style = ParagraphStyle(name='Normal', fontName='Arabic-normal', fontSize=12, leading=12. * 1.2)style.alignment=TA_RIGHTpdf_doc.build([Paragraph(arabic_text, style)])pdf_file.close()结果是在这里https://www.dropbox.com/s/gdyt6930jlad8id/disclaimer.pdf。您可以看到文本本身是正确且可读的(至少对于Google Translate而言),但未按RTL脚本的预期进行包装。
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

使用自动换行模块和<br>标记来拆分行;这不是完美的,因为每个段落的顶部都有一个空白行,但这是对某些用例的简单解决方案


import textwrap

def ShowArabictext(Text):



#style_comment.alignment = TA_RIGHT

wrkText=Text


isArabic=False

isBidi=False


for c in wrkText:

    cat=unicodedata.bidirectional(c)


    if cat=="AL" or cat=="AN":

        isArabic=True

        isBidi=True

        break

    elif cat=="R" or cat=="RLE" or cat=="RLO":

        isBidi=True


if isArabic:


    #wrkText=arabic_table(wrkText)    


    wrkText=textwrap.wrap( wrkText,70)

    wrkTexttemp=[]

    l=u''

    i=0

    for w in wrkText:

        # break each line with html markup allowed in reportlab 

        l=l+u'<br></br>'+arabic_rtlize.process.shape(arabic_reshaper.reshape(w ))


    wrkText=l




if isBidi:

    wrkText=get_display(wrkText)


return [wrkText,isArabic,isBidi]


查看完整回答
反对 回复 2021-04-02
  • 3 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信