python-3.x 如何正确使用`drawString`在PDF文件上绘制阿拉伯文本?(reportlab.pdfgen)

cxfofazt  于 2023-03-24  发布在  Python
关注(0)|答案(2)|浏览(159)

我使用python reportlab(window10,python3.6)在页面中编写文本,当文本是英语时它可以工作,但当我使用阿拉伯语文本时,它在图像中编写混乱的代码。
下面是我的代码:

from reportlab.lib.units import mm
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
page = canvas.Canvas("test.pdf", pagesize=A4)
page.drawString(10*mm, 267*mm, "اللغة العربية") 
page.showPage()
page.save()

enter image description here

ee7vknir

ee7vknir1#

你必须使用一个支持阿拉伯字符的字体。我以字体Scheherazade为例(你必须复制Scheherazade-Regular.ttfsite-packages\reportlab\fonts):

from reportlab.lib.units import mm
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont 

pdfmetrics.registerFont(TTFont('Scheherazade', 'Scheherazade-Regular.ttf'))

page = canvas.Canvas("test.pdf", pagesize=A4)
page.setFont('Scheherazade', 12)
page.drawString(10*mm, 267*mm, "اللغة العربية") 
page.showPage()
page.save()

参考:Report Lab can't handle hebrew (unicode)

xxslljrj

xxslljrj2#

要解决这个问题,你必须使用4个步骤:
1.导入***rtl***

```from rtl import reshaper```

1.实现此方法:

@staticmethod
        def reshape_text(text):
            text = reshaper.reshape(text)
            text = get_display(text)
            get_display() 
            return text

3.在pdf中添加字体。我使用FPDF库,并在下面添加代码

import fpdf
    pdf = fpdf.FPDF(format="A4")  # pdf format
    pdf.add_font("fontNormal", style="", fname="./Sahel.ttf", uni=True)
    pdf.set_font("fontNormal", "", size=int(10))  # font and textsize

1.最后,您可以将文本传递到PDF生成器:

pdf.cell(90, 7, txt=self.reshape_text("مهندس علیرضا صفافرد"), ln=1, align="R")

相关问题