Нет преобразования при преобразовании DOCX в PDF - PullRequest
0 голосов
/ 10 февраля 2019

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

Когда я выполняю скрипт, я получаю файл PDF без изображения, все вкладки заменяются пробеломи все таблицы имеют границу 3px.

Кто-нибудь знает, почему мне не хватает этих стилей?

Вот мой сценарий:

while ($data2 = mysql_fetch_array($rsSql)){
  $countLines=$countLines+1;
  $templateProcessor->setValue('quantity#'.$countLines, $data2['quantity']);
  $templateProcessor->setValue('name#'.$countLines, $data2['name']);
  $templateProcessor->setValue('price#'.$countLines, "€ " .$data2['price'] ."");
}

\PhpOffice\PhpWord\Settings::setPdfRenderer('./dompdf');
\PhpOffice\PhpWord\Settings::setPdfRendererPath('./dompdf');
\PhpOffice\PhpWord\Settings::setPdfRendererName('DOMPDF');

$temp_file = tempnam(sys_get_temp_dir(), 'Word');
\$templateProcessor->saveAS($temp_file);

$phpWord = \PhpOffice\PhpWord\IOFactory::load($temp_file); 

$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord , 'PDF');
$xmlWriter->save('result.pdf');  

header("Content-type:application/pdf");
header("Content-Disposition:attachment;filename='result.pdf'");
readfile("result.pdf");

1 Ответ

0 голосов
/ 13 февраля 2019

После просмотра исходного кода кажется, что 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).

...