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

假设我有这个阿拉伯语代码段:


إذاأخذنابعينالإعتبارطبيعةتقلبالمناخوالمتغيراتالبينيةالسنويةوتلكعلطالمدىالطويلإضافةإلىت


在英语中,这意味着:“如果我们考虑到气候变异性和年际变异性的本质,以及由于缺乏所使用的测量和计算的准确性而长期考虑的性质……。”


现在,我想将其呈现为Reportlab PDF doc(python):


arabic_text = u'إذا أخذنا بعين الإعتبار طبيعة تقلب المناخ و المتغيرات البينية السنوية و تلك على المدى الطويل إضافة إلى عدم دقة القياسات والحسابات المتبعة'

arabic_text = arabic_reshaper.reshape(arabic_text) # join characters

arabic_text = get_display(arabic_text) # change orientation by using bidi


pdf_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_RIGHT

pdf_doc.build([Paragraph(arabic_text, style)])

pdf_file.close()

结果是在这里https://www.dropbox.com/s/gdyt6930jlad8id/disclaimer.pdf。您可以看到文本本身是正确且可读的(至少对于Google Translate而言),但未按RTL脚本的预期进行包装。


蛊毒传说
浏览 211回答 3
3回答

GCT1015

使用自动换行模块和<br>标记来拆分行;这不是完美的,因为每个段落的顶部都有一个空白行,但这是对某些用例的简单解决方案import textwrapdef ShowArabictext(Text):#style_comment.alignment = TA_RIGHTwrkText=TextisArabic=FalseisBidi=Falsefor c in wrkText:&nbsp; &nbsp; cat=unicodedata.bidirectional(c)&nbsp; &nbsp; if cat=="AL" or cat=="AN":&nbsp; &nbsp; &nbsp; &nbsp; isArabic=True&nbsp; &nbsp; &nbsp; &nbsp; isBidi=True&nbsp; &nbsp; &nbsp; &nbsp; break&nbsp; &nbsp; elif cat=="R" or cat=="RLE" or cat=="RLO":&nbsp; &nbsp; &nbsp; &nbsp; isBidi=Trueif isArabic:&nbsp; &nbsp; #wrkText=arabic_table(wrkText)&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; wrkText=textwrap.wrap( wrkText,70)&nbsp; &nbsp; wrkTexttemp=[]&nbsp; &nbsp; l=u''&nbsp; &nbsp; i=0&nbsp; &nbsp; for w in wrkText:&nbsp; &nbsp; &nbsp; &nbsp; # break each line with html markup allowed in reportlab&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; l=l+u'<br></br>'+arabic_rtlize.process.shape(arabic_reshaper.reshape(w ))&nbsp; &nbsp; wrkText=lif isBidi:&nbsp; &nbsp; wrkText=get_display(wrkText)return [wrkText,isArabic,isBidi]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python