換為PDF文件的三種方式)
最近工作中遇到了需要把word文件轉(zhuǎn)換為pdf文件功能嘗試了幾種方式在此記錄一下供大家參考。環(huán)境準(zhǔn)備服務(wù)器CentOS 7.8PHP7.2一、 使用 PHPWord Dompdf純 PHP無需系統(tǒng)軟件推薦輕量場(chǎng)景或使用mpdf或者tcpdf都可以原理就是獲取word文件的內(nèi)容并轉(zhuǎn)換為html并將html轉(zhuǎn)換成pdf。適合簡(jiǎn)單 Word 文檔.docx無復(fù)雜格式、圖片、表格。對(duì)于復(fù)雜word文件不推薦此種方式。1. 安裝依賴12composerrequirephpoffice/phpwordcomposerrequiredompdf/dompdf2. 轉(zhuǎn)換代碼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 轉(zhuǎn) PDF$dompdfnewDompdf();$dompdf-loadHtml($html);$dompdf-setPaper(A4,portrait);$dompdf-render();// 4. 保存 PDFfile_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. 安裝 LibreOffice1.1 使用EPEL庫(kù)安裝1sudoyuminstallepel-release安裝 LibreOffice1sudoyuminstalllibreoffice1.2 使用 RPM Fusion 倉(cāng)庫(kù)導(dǎo)入 RPM Fusion 的 GPG 密鑰并安裝倉(cāng)庫(kù)配置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 倉(cāng)庫(kù)下載并安裝 LibreOffice 的 YUM 倉(cāng)庫(kù)配置文件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 倉(cāng)庫(kù)123sudoyuminstallepel-releasesudoyuminstallhttps://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpmsudoyuminstallcentos-release-powertools安裝 Snapd?12sudoyuminstallsnapdsudosystemctlenable--now snapd.socket安裝LibreOffice1sudosnapinstalllibreoffice --classic2. 轉(zhuǎn)換代碼確保 PHP 能執(zhí)行 exec/shell_exec 函數(shù)123456789101112131415161718192021222324?php// Word 路徑$wordFile __DIR__ ./test.docx;// 輸出目錄$outputDir __DIR__;// Windows 下 LibreOffice 安裝路徑改成你自己的$libreOfficeC:\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 擴(kuò)展UNIX 系統(tǒng)專用性能強(qiáng)適合Linux 服務(wù)器大量文檔批量轉(zhuǎn)換。需要安裝unoconv LibreOffice。1. 安裝unoconv在 CentOS 上安裝unoconv和它的依賴項(xiàng)通常需要使用一些額外的軟件包因?yàn)?CentOS 默認(rèn)的倉(cāng)庫(kù)中不包含 unoconv可以通過以下步驟安裝1.1 安裝 EPEL 倉(cāng)庫(kù)參考 方法二 安裝 LibreOffice1.2 安裝unoconv一旦安裝了 EPEL 倉(cāng)庫(kù)和 LibreOffice你就可以通過 pip 安裝 unoconv 了。首先確保你的系統(tǒng)已經(jīng)安裝了 Python 和 pip。你可以通過以下命令安裝 pip如果尚未安裝1sudoyuminstallpython3-pip然后使用pip安裝unoconv1pip3installunoconv1.3 確認(rèn)安裝1unoconv --version如果這個(gè)命令返回了版本信息那么 unoconv 就已經(jīng)成功安裝了。2. 轉(zhuǎn)換代碼安裝成功后就可以開始轉(zhuǎn)換文件了轉(zhuǎn)換命令1unoconv -f pdf -o 轉(zhuǎn)換后的pdf文件地址 word文件地址1234567?php$wordtest.docx;$pdfoutput.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文件后中文會(huì)顯示為亂碼需要安裝中文字體來解決。?3.1 下載中文字體?從互聯(lián)網(wǎng)上下載你需要的中文字體文件通常是 .ttf 或 .otf 文件。這里已經(jīng)為大家準(zhǔn)備好了一些字體里面有我自己用的也有網(wǎng)上分享的https://pan.quark.cn/s/051c9ef67a4f大家也可以自己到網(wǎng)上搜索一些免費(fèi)字體使用。3?.2 將字體文件復(fù)制到字體目錄?將下載的字體文件復(fù)制到系統(tǒng)的字體目錄中通常是 /usr/share/fonts/ 或 /usr/share/fonts/chinese/。如下圖所示?3.3 更新字體緩存?更新字體緩存使系統(tǒng)能夠識(shí)別新安裝的字體1sudofc-cache -fv字體庫(kù)安裝之后再次轉(zhuǎn)換中文就會(huì)顯示正常。本人使用的是unoconv進(jìn)行轉(zhuǎn)換大家還有哪些好方法歡迎留言討論。