Как сохранить изображения при объединении 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)