拓冰建站拓冰建站
首页 / 资讯中心 / 正文

使用PHP将Word文件转换为PDF文件的三种方式

最近工作中遇到了需要把word文件转换为pdf文件功能尝试了几种方式在此记录一下供大家参考。环境准备服务器CentOS 7.8PHP7.2一、 使用 PHPWord Dompdf纯 PHP无需系统软件推荐轻量场景或使用mpdf或者tcpdf都可以原理就是获取word文件的内容并转换为html并将html转换成pdf。适合简单 Word 文档.docx无复杂格式、图片、表格。对于复杂word文件不推荐此种方式。1. 安装依赖12composerrequirephpoffice/phpwordcomposerrequiredompdf/dompdf2. 转换代码12345678910111213141516171819202122232425?phprequirevendor/autoload.php;usePhpOffice\PhpWord\IOFactory;useDompdf\Dompdf;// 输入 Word 路径$wordPathtest.docx;// 输出 PDF 路径$pdfPathoutput.pdf;try{// 1. 读取 Word$phpWord IOFactory::load($wordPath);// 2. 先渲染为 HTML$htmlWriter IOFactory::createWriter($phpWord,HTML);$html$htmlWriter-getContent();// 3. 使用 Dompdf 转 PDF$dompdfnewDompdf();$dompdf-loadHtml($html);$dompdf-setPaper(A4,portrait);$dompdf-render();// 4. 保存 PDFfile_put_contents($pdfPath,$dompdf-output());echo转换成功PDF 已保存到$pdfPath;}catch(Exception$e) {echo转换失败.$e-getMessage();}二、调用 LibreOffice 命令最稳定支持复杂 Word生产环境首选适合复杂 Word带图片、表格、样式、公式、.doc/.docx格式还原度最高。Windows/Linux 服务器都能用。1. 安装 LibreOffice1.1 使用EPEL库安装1sudoyuminstallepel-release安装 LibreOffice1sudoyuminstalllibreoffice1.2 使用 RPM Fusion 仓库导入 RPM Fusion 的 GPG 密钥并安装仓库配置1sudorpm --importhttps://rpmfusion.org/keys?actionAttachFiledogettargetRPM-GPG-KEY-rpmfusion-free-centos-81sudoyum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %centos).noarch.rpm安装LibreOffice1sudoyuminstalllibreoffice-core1.3 使用官方 LibreOffice 仓库下载并安装 LibreOffice 的 YUM 仓库配置文件1sudorpm -Uvh https://download.documentfoundation.org/libreoffice/stable/6.4.7/rpm/x86_64/libreoffice6.4.7-lp180103.x86_64.rpm安装LibreOffice1sudoyuminstalllibreoffice-core1.4 使用 Snap 包管理器如果你使用的是 CentOS 8 或更高版本CentOS 版本支持 Snap启用 EPEL 和 PowerTools 仓库123sudoyuminstallepel-releasesudoyuminstallhttps://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpmsudoyuminstallcentos-release-powertools安装 Snapd‌12sudoyuminstallsnapdsudosystemctlenable--now snapd.socket安装LibreOffice1sudosnapinstalllibreoffice --classic2. 转换代码确保 PHP 能执行 exec/shell_exec 函数123456789101112131415161718192021222324?php// Word 路径$wordFile __DIR__ ./test.docx;// 输出目录$outputDir __DIR__;// Windows 下 LibreOffice 安装路径改成你自己的$libreOfficeC:\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 文档三、使用 SphinxSearch 扩展UNIX 系统专用性能强适合Linux 服务器大量文档批量转换。需要安装unoconv LibreOffice。1. 安装unoconv在 CentOS 上安装unoconv和它的依赖项通常需要使用一些额外的软件包因为 CentOS 默认的仓库中不包含 unoconv可以通过以下步骤安装1.1 安装 EPEL 仓库参考 方法二 安装 LibreOffice1.2 安装unoconv一旦安装了 EPEL 仓库和 LibreOffice你就可以通过 pip 安装 unoconv 了。首先确保你的系统已经安装了 Python 和 pip。你可以通过以下命令安装 pip如果尚未安装1sudoyuminstallpython3-pip然后使用pip安装unoconv1pip3installunoconv1.3 确认安装1unoconv --version如果这个命令返回了版本信息那么 unoconv 就已经成功安装了。2. 转换代码安装成功后就可以开始转换文件了转换命令1unoconv -f pdf -o 转换后的pdf文件地址 word文件地址1234567?php$wordtest.docx;$pdfoutput.pdf;exec(unoconv -f pdf $pdf $word);if(file_exists($pdf)) {echo转换成功;}3. 中文乱码解决CentOS系统默认是不安装中文字体的如果系统中没有中文字体word转换成pdf文件后中文会显示为乱码需要安装中文字体来解决。‌3.1 下载中文字体‌从互联网上下载你需要的中文字体文件通常是 .ttf 或 .otf 文件。这里已经为大家准备好了一些字体里面有我自己用的也有网上分享的https://pan.quark.cn/s/051c9ef67a4f大家也可以自己到网上搜索一些免费字体使用。3‌.2 将字体文件复制到字体目录‌将下载的字体文件复制到系统的字体目录中通常是 /usr/share/fonts/ 或 /usr/share/fonts/chinese/。如下图所示‌3.3 更新字体缓存‌更新字体缓存使系统能够识别新安装的字体1sudofc-cache -fv字体库安装之后再次转换中文就会显示正常。本人使用的是unoconv进行转换大家还有哪些好方法欢迎留言讨论。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门