Приложение на основе Laravel преобразует документы (.doc, .docx, .pdf, .png, .otd, html и т. Д.) В PDF, чтобы их можно было объединить в основной документ PDF.Он использует комбинацию плагинов, таких как PHPWord и DOMPDF Wrapper , для загрузки и создания файлов.Время от времени процесс сталкивается с ошибкой из-за файла Word.
ОШИБКА: PhpOffice \ PhpWord \ Exception \ InvalidImageException: недопустимое изображение: 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 существует несколько проблем.
- Поддержка EMFimage # 1480
- Ошибка чтения 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()
), затем zipрезервное копирование файла docx, но это не сработало.Я могу открыть новый файл docx и увидеть, что изображение исчезло, но в приложении по-прежнему сохраняется ошибка PHPWord.