Печать арабского c - строки расположены в обратном порядке, если абзац отображается в блоке с несколькими строками после использования ставки - PullRequest
1 голос
/ 13 июля 2020

Хорошо, во-первых, источником моих данных являются листы Google, простая таблица со строками (ID, Confession и Age). Я использую api листов Google, чтобы подключить данные к моему python скрипту с помощью gspread и google oauth2client, чтобы получить Столбец исповеди (который в основном состоит из абзацев, от 100 до 200 арабских c слов)

После того, как данные / признание сохраняются в переменной исповеди в моем коде, я запускаю его с помощью функций преобразования арабского c и получить отображение (алгоритм биди). затем вывод обрабатывается «Pillow-Img», чтобы добавить абзацы в изображение. вывод в порядке, араби c отображается отлично, но строки начинаются снизу, а не с верхней правой стороны.

текст должен быть написан справа налево

пример: тест

1011 * однако, фактический абзац

كيما يكون التقريران متسقين تماما, فإن هناك تغييرا طفيفا في الفقرة 2 من تقرير الفريق العامل الثاني, التي يرد فيها ذكر الرئيس والموظفين المعنيين الآخرين.

как вы можете заметить «كيما يكون التقريران» стоит в конце предложения на изображении, но в начале (справа вверху) в исходном абзаце (цитата ), поэтому в основном строки меняются местами, и я не могу найти обходной путь, не разбивая абзацы на маленькие строки, а затем распечатывая их построчно, что буквально невозможно из-за того, что средний абзац будет около 200 слов.

get_arabic_text() и arabicfix() - обе функции созданы для изменения формы арабского c, за исключением того, что get_arabic_text разделяет ввод и изменяет слово за словом. но arabicfix () просто помещает все данные в преобразователь arabi c. в коде я запускаю только arabicfix ()

Я склонен полагать, что проблема находится в пределах bidi algorithm, но я не могу найти решение.

# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont
from bidi.algorithm import get_display
import textwrap, os, re, arabic_reshaper
from rtl import reshaper

def f(p): return os.path.join(directory, p)
directory = os.path.normcase(os.path.dirname(__file__))

def get_arabic_text(text):
    if reshaper.has_arabic_letters(text):
        words = text.split()
        reshaped_words = []
        for word in words:
            if reshaper.has_arabic_letters(word):
                # for reshaping and concating words
                reshaped_text = reshaper.reshape(word)
                # for right to left
                bidi_text = get_display(reshaped_text)
                reshaped_words.append(bidi_text)
            else:
                reshaped_words.append(word)
        reshaped_words.reverse()
    return ' '.join(reshaped_words)
    return text



def draw_multiple_line_text(image, text, font, text_color, text_start_height):
    draw = ImageDraw.Draw(image)
    print(text)
    image_width, image_height = image.size
    y_text = text_start_height
    lines = textwrap.wrap(text, width=65)
    print(lines)
    for line in lines:
        line_width, line_height = font.getsize(line)
        draw.text(((image_width - line_width)/2, y_text),line, font=font, fill=text_color)
        y_text += line_height

def arabicfix(text):
    config_from_font = arabic_reshaper.config_for_true_type_font(
        f('arial.ttf'))
    reshaper = arabic_reshaper.ArabicReshaper(config_from_font)
    text_to_be_reshaped = text
    reshaped_text=reshaper.reshape(text_to_be_reshaped)
    bidi_text = get_display(reshaped_text,base_dir='R')
    return bidi_text



def main():
    image = Image.open('twitter2.jpg')
    arabictext=u"كيما يكون التقريران متسقين تماما، فإن هناك تغييرا طفيفا في الفقرة 2 من تقرير الفريق العامل الثاني، التي يرد فيها ذكر الرئيس والموظفين المعنيين الآخرين."
    text=arabicfix(arabictext)
    print("text:", text)
    fontsize = 25
    textcolor= (0,0,0)
    text_height =50
    font = ImageFont.truetype('/Users/Hady/PycharmProjects/untitled/arial.ttf', fontsize)
    draw_multiple_line_text(image, text, font,textcolor,text_height)


    image.save(f('tofff.jpg'))


main()
...