Ошибка преобразования файла .docx (с фоном изображения .emf) в PDF

Приложение на основе Laravel конвертирует документы (.doc, .docx, .pdf, .png, .otd, html и т. д.) В PDF, чтобы их все можно было объединить в главный PDF-документ. Он использует комбинацию плагинов, таких как PHPWord и DOMPDF оболочка, для загрузки и создания файлов. Время от времени процесс обнаруживает ошибку из-за файла Word.

ERROR: PhpOffice\PhpWord\Exception\InvalidImageException: Invalid image: zip:// ... #word/media/image2.emf

Ошибка вызвана фоном изображения в документе, который действует как водяной знак. Часть PHPWord, которая выводит ошибки, - это метод PhpOffice\PhpWord\Element\Image->checkImage(), но происходит, когда файл пытается загрузить.

Settings::setPdfRendererName(Settings::PDF_RENDERER_DOMPDF);
$pdfWord = IOFactory::load(storage_path() . '/app/uploads/randomfile.docx', 'Word2007');

Как приложение может преобразовать документ Word со встроенным изображением EMF в PDF?

Для получения дополнительной информации о коде / информации о том, как воссоздать ошибку, существует несколько проблем в библиотеке Github PHPWord.

  1. Поддержка образа EMF# 1480
  2. Ошибка чтения docx при наличии изображения с удаленного URL # 1173

Информация, связанная с окружающей средой:

  • Сервер: Windows / IIS
  • PHP: 7.2.11
  • Laravel: 5.7.15
  • PHPWord: 0,15.0

Обновлено: Я также пытался взглянуть на это под другим углом, но безуспешно. Я попытался использовать PHP ZipArchive, чтобы распаковать файл docx, удалить изображение emf из документа (ZipArchive::deleteName()), удалить ссылку на изображение emf в [Content_Types].xml (ZipArchive::getFromName()), затем заархивировать файл docx, но это не сработало. Я могу открыть новый файл docx и увидеть, что изображение исчезло, но ошибка PHPWord все еще сохраняется в приложении.

imagemagick.org/script/command-line-processing.php может преобразовать его в .eps или отрендерить в .png (или даже с библиотекой PHP). То есть извлекать, преобразовывать, заменять. ошибка могла возникнуть из-за ссылки в xml, а не из двоичных данных; и этот вопрос почти не имеет отношения к laravel-5.
Martin Zeitler 15.12.2018 02:11

Возможно, это не ваш ответ. Но рассмотрите возможность использования Microsoft Graph API для преобразования документов. Поскольку он предоставлен Microsoft, я не вижу никаких проблем для преобразования, и он будет обрабатывать все документы, поддерживаемые Microsoft. Вот ссылка, developer.microsoft.com/en-us/graph/graph-explorer. Примечание. У вас должна быть учетная запись Outlook.

Shaunak Patel 15.12.2018 13:45

По состоянию на 04.12.2020 эта ошибка все еще существует: github.com/PHPOffice/PHPWord/issues/1480

cfnerd 04.12.2020 15:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
9
3
1 553
1

Ответы 1

Похоже, у PHPWord есть запрос функции для решения этой проблемы.

https://github.com/PHPOffice/PHPWord/issues/1480

Я думаю, что вы на правильном пути с изменением файла, вероятно, есть ссылка на изображение, которое вам не хватает где-то, к которому PHPWord все еще пытается получить доступ.

Я бы разархивировал файл на вашем локальном диске и grep (поиск содержимого взорванного файла) каталог для файла, который вы ищете. Это покажет вам, где еще вам может потребоваться удалить его из ссылки в файле.

Спасибо, @Morris Buel. Я посмотрю, смогу ли я углубиться в процесс архивирования и сканирования.

cfnerd 02.01.2019 19:22

@cfnerd вы уже успели разобраться в этом?

Morris Buel 14.05.2019 15:17

Извини, Моррис ... Я фактически сменил работу, и поэтому больше не продвигался с этой ошибкой. До этого мы писали обходной путь. Я попробовал методы распаковки немного дальше после того, как вы упомянули об этом, а затем заблудился, изучая все варианты, прежде чем решать проблему. Потерянный в хорошем смысле ... эта библиотека Zip - не шутка!

cfnerd 20.05.2019 23:17

Другие вопросы по теме