Как включить поддержку арабского в reportlab.pdfgen с помощью drawString ()? - PullRequest
0 голосов
/ 05 мая 2019

У меня есть код qr в PIL Image и некоторый арабский текст, и я пытаюсь поместить изображение qr в файл PDF. Я использую reportlab.pdfgen х canvas.

После долгих поисков я нашел arabic_reshaper, чей-то проект, который не работал, и после прочтения исходного кода textobject.py я обнаружил, что мне нужно установить pyfribidi, установить его и использовать drawString(x,y,"مربحا",RTL) ничего не происходит.

Я использую arabic_reshaper, как описано в репозитории, и RTL из pyfribidi

import arabic_reshaper

reshaped = arabic_reshaper.reshape(exam_name)
c.drawString(x - 100, y - 20, reshaped, direction=RTL)

Результат всегда одинаков, как вы можете видеть справа, английские строки выглядят нормально, арабские - черными пикселями:

a busy cat

Если у вас есть какие-либо другие рекомендации для другой библиотеки, которые также будут оценены.

1 Ответ

0 голосов
/ 07 мая 2019

Спасибо некоторым разработчикам, которые отметили, что проблема вызвана шрифтом, который я смог исправить.

Сначала я скачал арабский TTF шрифт, и, поскольку я использую linux, я поместил его в '/usr/share/fonts', затем я сделал следующее:

import reportlab
import arabic_reshaper
from bidi.algorithm import get_display
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
// BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

reportlab.rl_config.TTFSearchPath.append(str(settings.BASE_DIR))
pdfmetrics.registerFont(TTFont('Arabic', '/usr/share/fonts/tradbdo.TTF'))

ar = arabic_reshaper.reshape(u'العربية')
ar = get_display(ar)
canvas.setFont('Arabic', 32)
canvas.drawString(x - 100, y, ar)

и теперь все работает просто отлично.

Внимательно прочитайте этот ответ.

...