使用PHP將Word文件轉(zhuǎn)換為PDF文件的三種方式
最近工作中遇到了需要把word文件轉(zhuǎn)換為pdf文件功能,嘗試了幾種方式,在此記錄一下,供大家參考。
環(huán)境準(zhǔn)備:
服務(wù)器:CentOS 7.8
PHP:7.2
一、 使用 PHPWord + Dompdf(純 PHP,無需系統(tǒng)軟件,推薦輕量場景)
或使用mpdf或者tcpdf都可以,原理就是獲取word文件的內(nèi)容,并轉(zhuǎn)換為html,并將html轉(zhuǎn)換成pdf。適合簡單 Word 文檔(.docx),無復(fù)雜格式、圖片、表格。對于復(fù)雜word文件,不推薦此種方式。
1. 安裝依賴
composer require phpoffice/phpword composer require dompdf/dompdf
2. 轉(zhuǎn)換代碼
<?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 轉(zhuǎn) PDF
$dompdf = new Dompdf();
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
// 4. 保存 PDF
file_put_contents($pdfPath, $dompdf->output());
echo "轉(zhuǎn)換成功!PDF 已保存到:$pdfPath";
} catch (Exception $e) {
echo "轉(zhuǎn)換失?。? . $e->getMessage();
}二、調(diào)用 LibreOffice 命令(最穩(wěn)定,支持復(fù)雜 Word,生產(chǎn)環(huán)境首選)
適合復(fù)雜 Word(帶圖片、表格、樣式、公式、.doc/.docx),格式還原度最高。Windows/Linux 服務(wù)器都能用。
1. 安裝 LibreOffice:
1.1 使用EPEL庫安裝
sudo yum install epel-release
安裝 LibreOffice
sudo yum install libreoffice
1.2 使用 RPM Fusion 倉庫
導(dǎo)入 RPM Fusion 的 GPG 密鑰并安裝倉庫配置:
sudo rpm --import https://rpmfusion.org/keys?action=AttachFile&do=get&target=RPM-GPG-KEY-rpmfusion-free-centos-8
sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %centos).noarch.rpm
安裝LibreOffice
sudo yum install libreoffice-core
1.3 使用官方 LibreOffice 倉庫
下載并安裝 LibreOffice 的 YUM 倉庫配置文件:
sudo rpm -Uvh https://download.documentfoundation.org/libreoffice/stable/6.4.7/rpm/x86_64/libreoffice6.4.7-lp180103.x86_64.rpm
安裝LibreOffice
sudo yum install libreoffice-core
1.4 使用 Snap 包管理器(如果你)
使用的是 CentOS 8 或更高版本,CentOS 版本支持 Snap
啟用 EPEL 和 PowerTools 倉庫
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:???????
sudo yum install snapd sudo systemctl enable --now snapd.socket
安裝LibreOffice
sudo snap install libreoffice --classic
2. 轉(zhuǎn)換代碼
確保 PHP 能執(zhí)行 exec/shell_exec 函數(shù)???????
<?php
// Word 路徑
$wordFile = __DIR__ . '/test.docx';
// 輸出目錄
$outputDir = __DIR__;
// Windows 下 LibreOffice 安裝路徑(改成你自己的)
$libreOffice = 'C:\Program Files\LibreOffice\program\soffice.exe';
// Linux 路徑
// $libreOffice = '/usr/bin/libreoffice';
// 轉(zhuǎn)換命令
$command = sprintf(
'"%s" --headless --convert-to pdf --outdir "%s" "%s"',
$libreOffice,
$outputDir,
$wordFile
);
// 執(zhí)行轉(zhuǎn)換
exec($command, $output, $status);
if ($status === 0) {
echo "轉(zhuǎn)換成功!PDF 保存在:$outputDir";
} else {
echo "轉(zhuǎn)換失敗";
print_r($output);
}格式還原度 99%,支持 .doc/.docx/wps 文檔
三、使用 SphinxSearch 擴展(UNIX 系統(tǒng)專用,性能強)
適合Linux 服務(wù)器,大量文檔批量轉(zhuǎn)換。需要安裝 unoconv + LibreOffice。
1. 安裝unoconv
在 CentOS 上安裝unoconv和它的依賴項,通常需要使用一些額外的軟件包,因為 CentOS 默認(rèn)的倉庫中不包含 unoconv,可以通過以下步驟安裝:
1.1 安裝 EPEL 倉庫
參考 方法二 安裝 LibreOffice
1.2 安裝unoconv
一旦安裝了 EPEL 倉庫和 LibreOffice,你就可以通過 pip 安裝 unoconv 了。首先,確保你的系統(tǒng)已經(jīng)安裝了 Python 和 pip。你可以通過以下命令安裝 pip(如果尚未安裝):
sudo yum install python3-pip
然后使用pip安裝unoconv:
pip3 install unoconv
1.3 確認(rèn)安裝
unoconv --version
如果這個命令返回了版本信息,那么 unoconv 就已經(jīng)成功安裝了。
2. 轉(zhuǎn)換代碼
安裝成功后,就可以開始轉(zhuǎn)換文件了,轉(zhuǎn)換命令:
unoconv -f pdf -o 轉(zhuǎn)換后的pdf文件地址 word文件地址
<?php
$word = 'test.docx';
$pdf = 'output.pdf';
exec("unoconv -f pdf $pdf $word");
if (file_exists($pdf)) {
echo "轉(zhuǎn)換成功";
}3. 中文亂碼解決
CentOS系統(tǒng)默認(rèn)是不安裝中文字體的,如果系統(tǒng)中沒有中文字體,word轉(zhuǎn)換成pdf文件后,中文會顯示為亂碼,需要安裝中文字體來解決。
3.1 下載中文字體
從互聯(lián)網(wǎng)上下載你需要的中文字體文件(通常是 .ttf 或 .otf 文件)。
這里已經(jīng)為大家準(zhǔn)備好了一些字體,里面有我自己用的,也有網(wǎng)上分享的:https://pan.quark.cn/s/051c9ef67a4f
大家也可以自己到網(wǎng)上搜索一些免費字體使用。
3.2 將字體文件復(fù)制到字體目錄
將下載的字體文件復(fù)制到系統(tǒng)的字體目錄中,通常是 /usr/share/fonts/ 或 /usr/share/fonts/chinese/。如下圖所示:

3.3 更新字體緩存
更新字體緩存,使系統(tǒng)能夠識別新安裝的字體:
sudo fc-cache -fv
字體庫安裝之后,再次轉(zhuǎn)換,中文就會顯示正常。
本人使用的是unoconv進(jìn)行轉(zhuǎn)換,大家還有哪些好方法,歡迎留言討論。
以上就是使用PHP將Word文件轉(zhuǎn)換為PDF文件的三種方式的詳細(xì)內(nèi)容,更多關(guān)于PHP將Word文件轉(zhuǎn)為PDF的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
PHP微信開發(fā)之微信錄音臨時轉(zhuǎn)永久存儲
這篇文章主要為大家詳細(xì)介紹了PHP微信開發(fā)之微信錄音臨時轉(zhuǎn)永久存儲,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
linux環(huán)境apache多端口配置虛擬主機的方法深入介紹
本篇文章是對linux環(huán)境apache多端口配置虛擬主機的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP計算數(shù)組中值的和與乘積的方法(array_sum與array_product函數(shù))
這篇文章主要介紹了PHP計算數(shù)組中值的和與乘積的方法,結(jié)合實例形式較為詳細(xì)的分析了array_sum與array_product函數(shù)的功能與使用方法,需要的朋友可以參考下2016-04-04

