Приложение на основе 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.
Информация, связанная с окружающей средой:
Обновлено:
Я также пытался взглянуть на это под другим углом, но безуспешно. Я попытался использовать PHP ZipArchive, чтобы распаковать файл docx, удалить изображение emf из документа (ZipArchive::deleteName()), удалить ссылку на изображение emf в [Content_Types].xml (ZipArchive::getFromName()), затем заархивировать файл docx, но это не сработало. Я могу открыть новый файл docx и увидеть, что изображение исчезло, но ошибка PHPWord все еще сохраняется в приложении.
Возможно, это не ваш ответ. Но рассмотрите возможность использования Microsoft Graph API для преобразования документов. Поскольку он предоставлен Microsoft, я не вижу никаких проблем для преобразования, и он будет обрабатывать все документы, поддерживаемые Microsoft. Вот ссылка, developer.microsoft.com/en-us/graph/graph-explorer. Примечание. У вас должна быть учетная запись Outlook.
По состоянию на 04.12.2020 эта ошибка все еще существует: github.com/PHPOffice/PHPWord/issues/1480






Похоже, у PHPWord есть запрос функции для решения этой проблемы.
https://github.com/PHPOffice/PHPWord/issues/1480
Я думаю, что вы на правильном пути с изменением файла, вероятно, есть ссылка на изображение, которое вам не хватает где-то, к которому PHPWord все еще пытается получить доступ.
Я бы разархивировал файл на вашем локальном диске и grep (поиск содержимого взорванного файла) каталог для файла, который вы ищете. Это покажет вам, где еще вам может потребоваться удалить его из ссылки в файле.
Спасибо, @Morris Buel. Я посмотрю, смогу ли я углубиться в процесс архивирования и сканирования.
@cfnerd вы уже успели разобраться в этом?
Извини, Моррис ... Я фактически сменил работу, и поэтому больше не продвигался с этой ошибкой. До этого мы писали обходной путь. Я попробовал методы распаковки немного дальше после того, как вы упомянули об этом, а затем заблудился, изучая все варианты, прежде чем решать проблему. Потерянный в хорошем смысле ... эта библиотека Zip - не шутка!
.epsили отрендерить в.png(или даже с библиотекойPHP). То есть извлекать, преобразовывать, заменять. ошибка могла возникнуть из-за ссылки в xml, а не из двоичных данных; и этот вопрос почти не имеет отношения кlaravel-5.