PHP - Laravel - 将 .docx 转换为 PDF 格式

问题描述 投票:0回答:4

如何使用 PHP Laravel 将文档 (docx) 转换为 PDF 格式?

在转换之前,我使用 PHPWord 来设置变量,之后,我想保存它或将其转换为 PDF。

php laravel docx phpword pdf-conversion
4个回答
0
投票

您需要在服务器上安装unoconv。 此外,服务器上需要运行 exec() 的权限。

  1. 安装unoconv

sudo apt-get install unoconv

  1. 添加以下行以将所需的 docx 文件转换为 pdf。

exec("doc2pdf sample-file.docx sample-file.pdf");


0
投票

详细总结:

  • 初始设置:首先使用 Composer 安装所需的软件包 — 用于 DOCX 操作的

    PHPWord
    和用于 PDF 转换的
    Dompdf

  • DOCX 创建或操作:利用

    PHPWord
    库创建新的 DOCX 文件或操作现有文件。保存这个中间 DOCX 文件。

  • DOCX 到 HTML 转换:使用

    PHPWord
    将 DOCX 文件转换为 HTML 文件,这将作为 PDF 转换之前的中间步骤。

  • HTML 到 PDF 转换:利用

    Dompdf
    库将中间 HTML 文件转换为 PDF 文件。保存此 PDF 文件。

  • Laravel 集成:通过将代码包装到控制器方法中并将其链接到路由,将整个流程集成到 Laravel 应用程序中。

第 1 步:安装所需的软件包

首先,确保您已安装

PHPWord
。如果没有,您可以通过 Composer 安装它:

composer require phpoffice/phpword

对于 PDF 转换,您可以使用

Dompdf
。也安装它:

composer require dompdf/dompdf

第 2 步:使用 PHPWord 创建 DOCX 文件

假设您已经使用 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');

第 3 步:将 DOCX 转换为 PDF

使用

.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);

第 4 步:集成到 Laravel 中

将上面的代码包装在 Laravel 控制器方法中:

public function convertDocxToPdf()
{
// Your PHPWord and Dompdf code here
}

然后将 URL 路由到该控制器方法。


批评与改进建议

  • .docx
    .html
    的转换对于复杂文档可能并不完美。为了获得更高的准确性,请考虑使用
    wkhtmltopdf
  • 这是一个基本示例;考虑添加异常处理和验证以获得更强大的解决方案。
  • 请谨慎对待机密数据以及临时
    .html
    .pdf
    文件的保存位置。确保临时位置安全并在使用后删除文件。

注意:此解决方案尚未经过全面测试,仅供参考。请在生产环境中实施之前彻底测试。


-1
投票

您可以使用 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');

-2
投票

您还可以使用“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')); 
    }
© www.soinside.com 2019 - 2024. All rights reserved.