UnrecognizedImageError - ошибка вставки изображения - python-docx - PullRequest
1 голос
/ 01 июня 2019

Я пытаюсь вставить файл wmf в docx, используя python-docx, который производит следующую трассировку.

Traceback (most recent call last):
  File "C:/Users/ADMIN/PycharmProjects/ppt-to-word/ppt_reader.py", line 79, in <module>
    read_ppt(path, file)
  File "C:/Users/ADMIN/PycharmProjects/ppt-to-word/ppt_reader.py", line 73, in read_ppt
    write_docx(ppt_data, False)
  File "C:/Users/ADMIN/PycharmProjects/ppt-to-word/ppt_reader.py", line 31, in write_docx
    document.add_picture(slide_data.get('picture_location'), width=Inches(5.0))
  File "C:\Python34\lib\site-packages\docx\document.py", line 72, in add_picture
    return run.add_picture(image_path_or_stream, width, height)
  File "C:\Python34\lib\site-packages\docx\text\run.py", line 62, in add_picture
    inline = self.part.new_pic_inline(image_path_or_stream, width, height)
  File "C:\Python34\lib\site-packages\docx\parts\story.py", line 56, in new_pic_inline
    rId, image = self.get_or_add_image(image_descriptor)
  File "C:\Python34\lib\site-packages\docx\parts\story.py", line 29, in get_or_add_image
    image_part = self._package.get_or_add_image_part(image_descriptor)
  File "C:\Python34\lib\site-packages\docx\package.py", line 31, in get_or_add_image_part
    return self.image_parts.get_or_add_image_part(image_descriptor)
  File "C:\Python34\lib\site-packages\docx\package.py", line 74, in get_or_add_image_part
    image = Image.from_file(image_descriptor)
  File "C:\Python34\lib\site-packages\docx\image\image.py", line 55, in from_file
    return cls._from_stream(stream, blob, filename)
  File "C:\Python34\lib\site-packages\docx\image\image.py", line 176, in _from_stream
    image_header = _ImageHeaderFactory(stream)
  File "C:\Python34\lib\site-packages\docx\image\image.py", line 199, in _ImageHeaderFactory
    raise UnrecognizedImageError
docx.image.exceptions.UnrecognizedImageError

Файл изображения в формате .wmf.

Любая помощь или предложение приветствуется.

1 Ответ

1 голос
/ 01 июня 2019

python-docx определяет тип файла изображения путем «распознавания» его отличительного заголовка.Таким образом, он может отличить JPEG от PNG, от TIFF и т. Д. Это гораздо более надежно, чем отображение расширения имени файла, и гораздо удобнее, чем требование от пользователя сообщить вам тип.Это довольно распространенный подход.

Эта ошибка означает, что python-docx не находит заголовок, который распознает.В этом случае формат метафайла Windows (WMF) может быть сложным, в проприетарных спецификациях и различиях в образцах файлов на местах есть много возможностей.

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

Сначала я попробую просто прочитать егои сохранение его как WMF (или, возможно, EMF, если это вариант).Этого может быть достаточно, чтобы добиться цели.Если вам нужно перейти на промежуточный формат, а затем обратно, это может быть с потерями, но, возможно, лучше, чем ничего.

Возможно, ImageMagick - еще один хороший выбор, потому что он, вероятно, имеет лучшее покрытие, чем у Подушки.

...