У меня нет никакого плана, как я могу преобразовать документ Word, который у меня есть в виде строки (blob) из моей базы данных, в PDF через PHPOffice библиотека.
Концепция:
Content-Type: application/pdf
пользователю.Nr. 1 и 4 я уже реализовал. Но я не знаю, как этого добиться. 2 и 3. Кто-нибудь может мне помочь?
Код:
//DB-Connection, Composer autoload, ...
$id = htmlspecialchars(trim($_REQUEST["id"]));
$get_data = $con->query("SELECT * FROM word_documents WHERE id='$id'"); //Get the blob
$data = $get_data->fetch();
if ($get_data->rowCount() == 1) {
header("Content-Type: application/pdf");
header("Content-Disposition: inline; filename=" . $data["name"]);
//TODO: Print the PDF as an string
} else {
echo "File not found";
}
После того, как я попробовал некоторые функции из PhpOffice библиотека, я наконец нашел решение.
Так что с библиотекой в самом себе, вы не можете загрузить и сохранить ее непосредственно из строки в строку. Вы должны создавать файлы в настоящее время.
//Set header to show as PDF
header("Content-Type: application/pdf");
header("Content-Disposition: inline; filename=" . $data["name"]);
//Create a temporary file for Word
$temp = tmpfile();
fwrite($temp, $data["data"]); //Write the data in the file
$uri = stream_get_meta_data($temp)["uri"]; //Get the location of the temp file
//Convert the docx file in to an PhpWord Object
$doc = PhpOffice\PhpWord\IOFactory::load($uri);
//Set the PDF Engine Renderer Path. Many engines are supported (TCPDF, DOMPDF, ...).
\PhpOffice\PhpWord\Settings::setPdfRendererPath("path/to/tcpdf");
\PhpOffice\PhpWord\Settings::setPdfRendererName('TCPDF');
//Create a writer, which converts the PhpWord Object into an PDF
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($doc, 'PDF');
//Create again an temp file for the new generated PDF.
$pdf_temp = tmpfile();
$pdf_uri = stream_get_meta_data($pdf_temp)["uri"];
//Save the PDF to the path
$xmlWriter->save($pdf_uri);
//Now print the file from the temp path.
echo file_get_contents($pdf_uri);
Я выбираю движок TCPDF, потому что его было очень легко установить. Просто скачайте файлы с Git Repository или Веб-сайт и загрузите его в папку.
Конечно, в конечном итоге это может быть не лучшим решением, но для меня это всего лишь предварительный просмотр текстового документа.
Так что этот сценарий был вдохновлен следующими двумя ссылками:
Вы можете вывести в строку
ob_start();
$xmlWriter->save('php://output');
return ob_get_clean();