Невозможно перевести текст на другой язык внутри ячейки или таблицы в pptx - PullRequest
0 голосов
/ 22 сентября 2018

Невозможно перевести текст на немецкий внутри ячейки или таблицы в pptx.Однако простой текст на слайдах переводится.

Мой входной pptx выглядит следующим образом: enter image description here

Получение вывода, как показано ниже: Hello World и так далее, не получениепереведено ..

enter image description here

код, который я использую, как показано ниже:

prs = Presentation('old.pptx')
for slide in prs.slides: 
    for shape in slide.shapes: 
        if not shape.has_text_frame: 
            continue
        text_frame = shape.text_frame
        text_frame.text=translator.translate(text_frame.text,dest='de').text



prs.save('new.pptx')

Может ли вышеуказанный код быть настроен так, чтобы переводможно сделать для всех внутри pptx?Я могу понять, что он ищет текстовый фрейм, но есть ли шанс настроить это на работу?Если я удаляю ниже из приведенного выше кода получит ошибку ...

   if not shape.has_text_frame: 
            continue

AttributeError: у объекта 'Picture' нет атрибута 'text_frame'

Я пошелчерез документы по python-pptx обнаружил, что есть функции для символов, таблиц, изображений и т. д., но он не может понять, как передать это для перевода, чтобы можно было перевести текст внутри него .. Ссылочная ссылка - https://python -pptx.readthedocs.io / ен / последний /

1 Ответ

0 голосов
/ 24 сентября 2018

Вам нужно будет итерировать ячейки любых таблиц отдельно, что-то вроде этого:

def iter_cells(table):
    """Generate each cell in *table*, left-to-right, top-to-bottom."""
    for row in table.rows:
        for cell in row.cells:
            yield cell

def translate_table(table):
    for cell in iter_cells(table):
        text_frame = cell.text_frame
        text_frame.text = translator.translate(text_frame.text, dest='de').text

for shape in slide.shapes:
    if shape.has_table:
        translate_table(shape.table)
    if not shape.has_text_frame:
        continue
    ...

Обратите внимание, что таблица сама по себе не является формой.Скорее, он содержится в форме GraphicFrame.

Что касается изображений, то не все формы могут содержать текст.Форма изображения - одна из тех, поэтому ее необходимо пропустить, прежде чем пытаться получить доступ к объекту TextFrame, которого у него нет (и не может быть).

...