Ошибка преобразования файла .docx (с фоном изображения .emf) в PDF - PullRequest
0 голосов
/ 05 декабря 2018

Приложение на основе 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 существует несколько проблем.

  1. Поддержка EMFimage # 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()), затем zipрезервное копирование файла docx, но это не сработало.Я могу открыть новый файл docx и увидеть, что изображение исчезло, но в приложении по-прежнему сохраняется ошибка PHPWord.

1 Ответ

0 голосов
/ 28 декабря 2018

Похоже, что PHPWord имеет открытый запрос на решение этой проблемы.

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

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

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

...