После просмотра исходного кода кажется, что PHPWord предварительно преобразовывает документ в HTML представление перед , позволяя сохранить его в PDF от dompdf , другой конвертер.
Это подтверждает открытый выпуск # 1139 , более того, он работает с отсутствующими стилями:
Используемые писатели PDF принимают вывод HTML , который также не имеет стиля .Классы определяются в теге <style>
, но они просто не используются.
Также последнее сообщение добавляет:
Это все еще кажется проблемой.Выводы html и pdf не повторяют некоторые стили в docx (верхний / нижний колонтитулы).
Относительно проблемы с границей, другой SO вопрос показывает аналогичную проблему в конверсионном HTML -> PDF.Решение состояло в том, чтобы отредактировать стиль CSS, который вы, очевидно, не можете выполнить в своем примере кода, если только вы не приступите к предварительному преобразованию в HTML.
В заключение, вы можете не решить вашу проблемув краткосрочной перспективе.Если вы не будете частью команды разработчиков, вы можете отправлять им сообщения об ошибках (а не в dompdf, так как это конвертер HTML-в-PDF и они выходят за рамки).Github позволяет добавлять файлы DOCX в отчет о проблеме.
Альтернативы
Вы можете проверить SO вопрос 204860 о серверестороны редактирование PDF библиотека .Ниже представлены два варианта: один - бесплатное программное обеспечение, другой - с закрытым исходным кодом и стоимостью.
LibreOffice
Другой способ - использовать LibreOffice в безголовый режим (выполнение командной строки без интерфейса):
libreoffice --headless --convert-to pdf <filename_to_convert>
A Оболочка PHP для LibreOffice, Office Converter также доступна здесь, если выне хотите беспокоиться об использовании libreoffice через exec()
.
Проверьте, будет ли преобразование LibreOffice соответствовать вашим потребностям (оно может охватывать не все случаи, но удовлетворяет вашим требованиям).
Aspose
Лучший конвертер, который я когда-либо использовал на работе, - это Aspose , API, охватывающий документы с пакетом Aspose.Words, рабочие листы с Aspose.Cells, презентации с Aspose.Slides и так далее.Но он с закрытым исходным кодом и довольно дорого (и вы будете платить за обновления , если вы захотите их после истечения срока действия лицензии).
Есть способ использоватьэто в PHP через Java (Aspose. Words и Aspose. Cells ) или .NET (Aspose. Words То же самое, кажется, идет с Aspose. Cells).