Ecriture du texte arabe dans un fichier pdf
Bonjour tout le monde,
je suis sur python 3.9.6, et j'utilise reportlab pour écriture des fichier pdf, pour la langue française ça marche trés bien, mais j'arrive pas à le faire pour la langue arabe
voici le fragment du code que j'utilise :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
import reportlab
import os
reportlab_directory=os.path.dirname(reportlab.__file__)
font_folder=os.path.join(reportlab_directory,"fonts")
custom_font_folder=os.path.join(font_folder,'Arabic.ttf')
custom_font=TTFont("arabic-custom",custom_font_folder)
pdfmetrics.registerFont(custom_font)
pdffile1=canvas.Canvas("font_arabic.pdf")
pdffile1.setFont('arabic-custom',20)
pdffile1.drawString(120,10," السلام عليكم")
pdffile1.save() |
la police de caractère Arabic.ttf est celle de alfont_com_IBMPlexSansArabic-Regular.ttf que j'ai téléchargé et renommer en Arabic.ttf et coller dans le dossier font de reportlab.
le résultat à l'exécution du code est un fichier pdf avec le texte suivant : م ك ي ل ع م ال س ل ا
les lettres sont détachée les uns des autres et le sens du texte est du gauche a droite au lieu de droite a gauche.
Merci d'avance pour votre aides.
arabic_reshaper et bidi ont résolus le probleme !
Bonjour tout le monde ,
après recherches sur internet j'ai trouvé la solution au problème posé , il faut 2 autres modules a savoir arabic_reshaper et bidi pour solutionner le problème :
voici une fragment du code qui fonctionne :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
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
from arabic_reshaper import reshape
from bidi.algorithm import get_display
pdfmetrics.registerFont(TTFont('mafont', 'Arabic.ttf'))
page = canvas.Canvas("test.pdf", pagesize=A4)
page.setFont('mafont', 12)
page.drawString(100*mm, 267*mm,get_display(reshape( " السلام ")))
page.showPage()
page.save() |
Merci à vous et @+