如何使用 PHP Laravel 将文档 (docx) 转换为 PDF 格式?
在转换之前,我使用 PHPWord 来设置变量,之后,我想保存它或将其转换为 PDF。
您需要在服务器上安装unoconv。 此外,服务器上需要运行 exec() 的权限。
sudo apt-get install unoconv
exec("doc2pdf sample-file.docx sample-file.pdf");
初始设置:首先使用 Composer 安装所需的软件包 — 用于 DOCX 操作的
PHPWord
和用于 PDF 转换的 Dompdf
。
DOCX 创建或操作:利用
PHPWord
库创建新的 DOCX 文件或操作现有文件。保存这个中间 DOCX 文件。
DOCX 到 HTML 转换:使用
PHPWord
将 DOCX 文件转换为 HTML 文件,这将作为 PDF 转换之前的中间步骤。
HTML 到 PDF 转换:利用
Dompdf
库将中间 HTML 文件转换为 PDF 文件。保存此 PDF 文件。
Laravel 集成:通过将代码包装到控制器方法中并将其链接到路由,将整个流程集成到 Laravel 应用程序中。
首先,确保您已安装
PHPWord
。如果没有,您可以通过 Composer 安装它:
composer require phpoffice/phpword
对于 PDF 转换,您可以使用
Dompdf
。也安装它:
composer require dompdf/dompdf
假设您已经使用 PHPWord 进行
.docx
操作,您可以创建或加载现有的 .docx
文件,如下所示:
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');
使用
.docx
将 .pdf
文件转换为 Dompdf
:
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
}
然后将 URL 路由到该控制器方法。
.docx
到 .html
的转换对于复杂文档可能并不完美。为了获得更高的准确性,请考虑使用 wkhtmltopdf
。.html
和 .pdf
文件的保存位置。确保临时位置安全并在使用后删除文件。注意:此解决方案尚未经过全面测试,仅供参考。请在生产环境中实施之前彻底测试。
您可以使用 PHPWord 库读取 .docx 文件的内容,然后使用其他库(例如 Dompdf 或 mPDF)将内容转换为 .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');
您还可以使用“phpoffice/phpword”和“barryvdh/laravel-dompdf”等软件包
composer require barryvdh/laravel-dompdf
composer require phpoffice/phpword
在 config/app.php 中注册服务提供商
要注册服务提供商,请打开 config/app.php 文件。并在“providers”数组末尾添加以下行:
'providers' => [
.....
Barryvdh\DomPDF\ServiceProvider::class,
]
此外,将以下行添加到末尾的“aliases”数组中。您可以根据需要使用任何别名,就像我们使用“PDF”一样,但您也可以使用“DoPDF”、“myPDF”、“PF”等别名
'aliases' => [
.....
'PDF' => Barryvdh\DomPDF\Facade::class,
]
然后在控制器中使用它们将 docx 转换为 pdf
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'));
}