如何使用PHP Laravel将文档(docx)转换为PDF格式?
在进行转换之前,我使用PHPWord来设置变量,然后希望将其保存或转换为PDF。
在进行转换之前,我使用PHPWord来设置变量,然后希望将其保存或转换为PDF。
您需要在服务器上安装unoconv。
此外,需要在服务器上获得运行exec()的权限。
sudo apt-get install unoconv
exec("doc2pdf sample-file.docx sample-file.pdf");
初始设置:首先通过Composer安装所需的软件包——PHPWord
用于DOCX文件操作和Dompdf
用于PDF转换。
创建或操作DOCX文件:使用PHPWord
库创建新的DOCX文件或操作现有的DOCX文件。保存这个中间的DOCX文件。
DOCX转HTML:使用PHPWord
将DOCX文件转换为HTML文件,这将作为PDF转换的中间步骤。
HTML转PDF:使用Dompdf
库将中间的HTML文件转换为PDF文件。保存这个PDF文件。
Laravel集成:将整个过程集成到Laravel应用程序中,将代码封装到控制器方法中,并将其链接到路由。
首先,确保您已安装PHPWord
。如果没有安装,可以通过Composer进行安装:
composer require phpoffice/phpword
Dompdf
。同样安装它:composer require dompdf/dompdf
use PhpOffice\PhpWord\PhpWord;
$phpWord = new PhpWord();
$section = $phpWord->addSection();
$section->addText('Hello, world!');
// Save DOCX file
$writer = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
$writer->save('helloWorld.docx');
use Dompdf\Dompdf;
// Load .docx file content
$phpWord = \PhpOffice\PhpWord\IOFactory::load('helloWorld.docx');
// Save the document as HTML
$writer = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'HTML');
$writer->save('helloWorld.html');
// Convert HTML to PDF using Dompdf
$dompdf = new Dompdf();
$dompdf->loadHtml(file_get_contents('helloWorld.html'));
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
// Save the PDF
$output = $dompdf->output();
file_put_contents('helloWorld.pdf', $output);
将上述代码放置在一个Laravel控制器方法中:
public function convertDocxToPdf()
{
// Your PHPWord and Dompdf code here
}
.docx
转换为.html
可能对于复杂文档来说不是完美的。为了更准确,考虑使用wkhtmltopdf
。.html
和.pdf
文件时要小心。确保临时位置的安全性,并在使用后删除文件。use PhpOffice\PhpWord\IOFactory;
use Dompdf\Dompdf;
$phpWord = IOFactory::load('path/to/file.docx');
$dompdf = new Dompdf();
$dompdf->loadHtml($phpWord->saveHTML());
$dompdf->render();
$dompdf->stream();
你也可以使用像 "phpoffice/phpword" 和 "barryvdh/laravel-dompdf" 这样的包
composer require phpoffice/phpword
composer require barryvdh/laravel-dompdf
然后在控制器中使用它们将docx转换为pdf
use PhpOffice\PhpWord\PhpWord;
use Barryvdh\DomPDF\Facade as PDF;
$phpWord = new PhpWord();
$phpWord->loadTemplate('path/to/file.docx');
$pdf = PDF::loadView('view', compact('phpWord'))->save('path/to/file.pdf');
composer require barryvdh/laravel-dompdf
composer require phpoffice/phpword
'providers' => [
.....
Barryvdh\DomPDF\ServiceProvider::class,
]
'aliases' => [
.....
'PDF' => Barryvdh\DomPDF\Facade::class,
]
use PDF;
public function convertWordToPDF()
{
/* Set the PDF Engine Renderer Path */
$domPdfPath = base_path('vendor/dompdf/dompdf');
\PhpOffice\PhpWord\Settings::setPdfRendererPath($domPdfPath);
\PhpOffice\PhpWord\Settings::setPdfRendererName('DomPDF');
//Load word file
$Content = \PhpOffice\PhpWord\IOFactory::load(public_path('result.docx'));
//Save it into PDF
$PDFWriter = \PhpOffice\PhpWord\IOFactory::createWriter($Content,'PDF');
$PDFWriter->save(public_path('new-result.pdf'));
}