环境准备:
服务器:CentOS 7.8
PHP:7.2
或使用mpdf或者tcpdf都可以,原理就是获取word文件的内容,并转换为html,并将html转换成pdf。适合简单 Word 文档(.docx),无复杂格式、图片、表格。对于复杂word文件,不推荐此种方式。
|
1 2 |
composer require phpoffice/phpword composer require dompdf/dompdf |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php require 'vendor/autoload.php'; use PhpOffice\PhpWord\IOFactory; use Dompdf\Dompdf; // 输入 Word 路径 $wordPath = 'test.docx'; // 输出 PDF 路径 $pdfPath = 'output.pdf'; try { // 1. 读取 Word $phpWord = IOFactory::load($wordPath); // 2. 先渲染为 HTML $htmlWriter = IOFactory::createWriter($phpWord, 'HTML'); $html = $htmlWriter->getContent(); // 3. 使用 Dompdf 转 PDF $dompdf = new Dompdf(); $dompdf->loadHtml($html); $dompdf->setPaper('A4', 'portrait'); $dompdf->render(); // 4. 保存 PDF file_put_contents($pdfPath, $dompdf->output()); echo "转换成功!PDF 已保存到:$pdfPath"; } catch (Exception $e) { echo "转换失败:" . $e->getMessage(); } |
适合复杂 Word(带图片、表格、样式、公式、.doc/.docx),格式还原度最高。Windows/Linux 服务器都能用。
|
1 |
sudo yum install epel-release |
安装 LibreOffice
|
1 |
sudo yum install libreoffice |
导入 RPM Fusion 的 GPG 密钥并安装仓库配置:
|
1 |
sudo rpm --import https://rpmfusion.org/keys?action=AttachFile&do=get&target=RPM-GPG-KEY-rpmfusion-free-centos-8 |
|
1 |
sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %centos).noarch.rpm |
安装LibreOffice
|
1 |
sudo yum install libreoffice-core |
下载并安装 LibreOffice 的 YUM 仓库配置文件:
|
1 |
sudo rpm -Uvh https://download.documentfoundation.org/libreoffice/stable/6.4.7/rpm/x86_64/libreoffice6.4.7-lp180103.x86_64.rpm |
安装LibreOffice
|
1 |
sudo yum install libreoffice-core |
使用的是 CentOS 8 或更高版本,CentOS 版本支持 Snap
启用 EPEL 和 PowerTools 仓库
|
1 2 3 |
sudo yum install epel-release sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm sudo yum install centos-release-powertools |
安装 Snapd:
|
1 2 |
sudo yum install snapd sudo systemctl enable --now snapd.socket |
安装LibreOffice
|
1 |
sudo snap install libreoffice --classic |
确保 PHP 能执行 exec/shell_exec 函数???????
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php // Word 路径 $wordFile = __DIR__ . '/test.docx'; // 输出目录 $outputDir = __DIR__; // Windows 下 LibreOffice 安装路径(改成你自己的) $libreOffice = 'C:\Program Files\LibreOffice\program\soffice.exe'; // Linux 路径 // $libreOffice = '/usr/bin/libreoffice'; // 转换命令 $command = sprintf( '"%s" --headless --convert-to pdf --outdir "%s" "%s"', $libreOffice, $outputDir, $wordFile ); // 执行转换 exec($command, $output, $status); if ($status === 0) { echo "转换成功!PDF 保存在:$outputDir"; } else { echo "转换失败"; print_r($output); } |
格式还原度 99%,支持 .doc/.docx/wps 文档
适合Linux 服务器,大量文档批量转换。需要安装 unoconv + LibreOffice。
在 CentOS 上安装unoconv和它的依赖项,通常需要使用一些额外的软件包,因为 CentOS 默认的仓库中不包含 unoconv,可以通过以下步骤安装:
参考 方法二 安装 LibreOffice
一旦安装了 EPEL 仓库和 LibreOffice,你就可以通过 pip 安装 unoconv 了。首先,确保你的系统已经安装了 Python 和 pip。你可以通过以下命令安装 pip(如果尚未安装):
|
1 |
sudo yum install python3-pip |
然后使用pip安装unoconv:
|
1 |
pip3 install unoconv |
|
1 |
unoconv --version |
如果这个命令返回了版本信息,那么 unoconv 就已经成功安装了。
安装成功后,就可以开始转换文件了,转换命令:
|
1 |
unoconv -f pdf -o 转换后的pdf文件地址 word文件地址 |
|
1 2 3 4 5 6 7 |
<?php $word = 'test.docx'; $pdf = 'output.pdf'; exec("unoconv -f pdf $pdf $word"); if (file_exists($pdf)) { echo "转换成功"; } |
CentOS系统默认是不安装中文字体的,如果系统中没有中文字体,word转换成pdf文件后,中文会显示为乱码,需要安装中文字体来解决。
从互联网上下载你需要的中文字体文件(通常是 .ttf 或 .otf 文件)。
这里已经为大家准备好了一些字体,里面有我自己用的,也有网上分享的:https://pan.quark.cn/s/051c9ef67a4f
大家也可以自己到网上搜索一些免费字体使用。
将下载的字体文件复制到系统的字体目录中,通常是 /usr/share/fonts/ 或 /usr/share/fonts/chinese/。如下图所示:

更新字体缓存,使系统能够识别新安装的字体:
|
1 |
sudo fc-cache -fv |
字体库安装之后,再次转换,中文就会显示正常。