Как сохранить изображения при объединении docx файлов?

Я пишу код, который должен объединять docx файлы. Среда, в котором её запускаю google colab. Сам по себе код нормально объединяет файлы, которые содержат текст. Но если в них содержится изображения, он их корректно не отображает.

!pip install python-docx
from docx import Document
from google.colab import files

def check_and_add_title(doc, file_name):
    # Ключевые слова для проверки
    keywords = ["Глава", "Часть", "Пролог"]

    # Проверяем, есть ли первый абзац
    if doc.paragraphs:
        first_paragraph = doc.paragraphs[0]

        # Проверяем наличие ключевых слов
        if not any(keyword in first_paragraph.text for keyword in keywords):
            print(f"Название главы отсутствует в файле: {file_name}")
            title = input("Введите название главы для этого файла: ")

            # Добавляем заголовок перед существующим текстом
            title_run = first_paragraph.insert_paragraph_before().add_run(f"{title}\n")
            title_run.bold = True

    return doc


def merge_docx(file_list, output_file_name):
    # Создаем новый документ
    merged_document = Document()

    for file in file_list:
        # Открываем текущий файл
        doc = Document(file)

        # Проверяем и добавляем название главы при необходимости
        doc = check_and_add_title(doc, file)

        # Копируем содержимое в итоговый документ
        for element in doc.element.body:
            merged_document.element.body.append(element)

    # Сохраняем итоговый документ
    merged_document.save(output_file_name)
    print(f"Файлы объединены в {output_file_name}")
    return output_file_name

# Загрузка файлов
print("Загрузите файлы для объединения:")
uploaded_files = files.upload()

# Получение списка загруженных файлов
file_list = list(uploaded_files.keys())

# Запрос имени итогового файла
output_file_name = input("Введите название для объединённого файла (с расширением .docx): ")

# Объединение файлов
merged_file = merge_docx(file_list, output_file_name)

# Скачивание объединенного файла
files.download(merged_file)

Как изменить код, чтобы он номально сохранял изображения? Буду очень благодарен, если поможете.


Ответы (1 шт):

Автор решения: Fox Fox

У меня получилось с помощью вот такого (требуются два модуля: python-docx и docxcompose):

from docx import Document
from docxcompose.composer import Composer

def merge_docx(file_list, output_file_name):
    # Создаем новый документ
    merged_document = Document(file_list[0])
    composer = Composer(merged_document)
    
    for file in file_list[1:]:
        doc = Document(file)
        composer.append(doc)
    
    # Сохраняем итоговый документ
    composer.save(output_file_name)
    print(f"Файлы объединены в {output_file_name}")

# Пример использования
file_list = ['file1.docx', 'file2.docx']
output_file_name = 'merged_file.docx'
merge_docx(file_list, output_file_name)
→ Ссылка