PHP實(shí)現(xiàn)word轉(zhuǎn)pdf的兩種方式(有用!)
方法一、使用phpword和tcpdf
1. 使用composer 安裝 phpword和tcpdf
composer require phpoffice/phpword composer require tecnickcom/tcpdf
2. 示例代碼 (試?yán)蚣苁莑aravel,以下文件默認(rèn)是放置在public中)
// 你的初始文件地址
$word = 'test.docx';
\PhpOffice\PhpWord\Settings::setPdfRendererPath(base_path('vendor/tecnickcom/tcpdf'));
//設(shè)置轉(zhuǎn)換pdf的類庫(kù)名(DomPDF、MPDF、TCPDF)需要下載對(duì)應(yīng)的類庫(kù)
\PhpOffice\PhpWord\Settings::setPdfRendererName('TCPDF');
// 加載word文件
$wordPdf = \PhpOffice\PhpWord\IOFactory::load($word);
// 讀取生成的docx文件 并且指明要生成的文件格式
$pdfWriter = \PhpOffice\PhpWord\IOFactory::createWriter($wordPdf , 'PDF');
// 設(shè)置文字字體,文字大小
$pdfWriter->SetFont('wryh','',20,'',false);
// 生成pdf文件 的保存地址
$temp_path = 'test.pdf'
// 文件保存
$pdfWriter->save($temp_path);
return $temp_path;
3. 中文亂碼 - 設(shè)置字體
亂碼一般是因?yàn)樽煮w問(wèn)題
1、從網(wǎng)上下載一個(gè)ttf文
2、找到 /vendor/tecnickcom/tcpdf/tools 的位置,將字體文件放在這個(gè)文件夾下,在此處打開窗口執(zhí)行命令
php ./tcpdf_addfont.php -b -t wryh -i wryh.ttf
之后就可以在 /vendor/tecnickcom/tcpdf/fonts/ 文件夾下找到三個(gè)同名的 wryh.ctg.z,wryh.php,wryh.z文件
3、然后你在執(zhí)行代碼時(shí),設(shè)置
$pdfWriter->SetFont(‘wryh’,‘’,20,‘’,false);
指明使用該字體即可。
方法二、使用unoconv將 word轉(zhuǎn)pdf (Centos 8)
1. 安裝libreoffice 安裝libreoffice
先為安裝 libreoffice 創(chuàng)建一個(gè)文件夾,用以保存下載的壓縮包 mkdir libreoffice cd libreoffice/ # 下載 libreoffice 安裝包 wget https://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.3.1/rpm/x86_64/LibreOffice_7.3.1_Linux_x86-64_rpm.tar.gz wget https://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.3.1/rpm/x86_64/LibreOffice_7.3.1_Linux_x86-64_rpm_sdk.tar.gz wget https://mirrors.cloud.tencent.com/libreoffice/libreoffice/stable/7.3.1/rpm/x86_64/LibreOffice_7.3.1_Linux_x86-64_rpm_langpack_zh-CN.tar.gz # 解壓安裝包 tar -zxvf LibreOffice_7.3.1_Linux_x86-64_rpm.tar.gz tar -zxvf LibreOffice_7.3.1_Linux_x86-64_rpm_sdk.tar.gz tar -zxvf LibreOffice_7.3.1_Linux_x86-64_rpm_langpack_zh-CN.tar.gz # 安裝命令 yum localinstall LibreOffice_7.3.1.3_Linux_x86-64_rpm/RPMS/*.rpm yum localinstall LibreOffice_7.3.1.3_Linux_x86-64_rpm_sdk/RPMS/*.rpm yum localinstall LibreOffice_7.3.1.3_Linux_x86-64_rpm_langpack_zh-CN/RPMS/*.rpm
為 libreoffice 配置全局變量
注:要找到你安裝的環(huán)境中的 libreoffice下的program的位置 vi /etc/profile # 配置文件中插入 export PATH=$PATH:/opt/libreoffice7.3/program (填寫自己環(huán)境的位置) # 使環(huán)境變量生效 source /etc/profile
檢查是否安裝成功 :
soffice --version 能顯示出來(lái) libreoffice 的版本,則安裝成功
2.安裝 unoconv
centos 8 中 使用 yum 安裝 unoconv 無(wú)效,所有我么使用wegt 下載壓縮包,解壓之后安裝
wget https://github.com/unoconv/unoconv/archive/master.zip unzip master.zip cd unoconv-master/ make install
使用命令執(zhí)行,使得word文件轉(zhuǎn)換格式為pdf
解釋: unoconv -f (你的格式) -o 新文件存儲(chǔ)的位置 要轉(zhuǎn)換的文件的位置; unoconv -f pdf -o /root/1.pdf /root/1.docx 查看新文件是否存在,確認(rèn)是否轉(zhuǎn)換成功
3.安裝字體 (若轉(zhuǎn)換的文件出現(xiàn)) 創(chuàng)建字體目錄,將自己的字體文件上傳至該文件夾下
mkdir -p /usr/share/fonts/win
執(zhí)行以下命令,使字體生效
mkfontscale mkfontdir sudo fc-cache -fv
【報(bào)錯(cuò)】
若執(zhí)行 mkfontscale 出現(xiàn)報(bào)錯(cuò) mkfontscale not found
則執(zhí)行下列命令
# 安裝mkfontscale yum install mkfontscale # 安裝fontconfig yum install fontconfig
4. 使用代碼將文件轉(zhuǎn)換
/** 文件格式轉(zhuǎn)換
* @param $old_file 舊文件 當(dāng)前項(xiàng)目絕對(duì)地址
* @param $new_file 新文件 當(dāng)前項(xiàng)目中的絕對(duì)地址
* @param $file_format 指定轉(zhuǎn)換的格式
*/
protected static function File_conversion($old_file,$new_file,$file_format='pdf')
{
$old_path = public_path($old_file);
$new_path = public_path($new_file);
shell_exec(" unoconv -f ".$file_format." -o ".$new_path." ".$old_path);
}
總結(jié)
方法一:
- 優(yōu)點(diǎn):操作較為簡(jiǎn)單,只需安裝一些php的擴(kuò)展就可以使用,
- 弊端:但是該方法只適合一些word中內(nèi)容比較簡(jiǎn)單的進(jìn)行轉(zhuǎn)義為pdf,因?yàn)閿?shù)據(jù)格式復(fù)雜之后,會(huì)容易發(fā)生文字錯(cuò)位的問(wèn)題。
方法二:
- 優(yōu)點(diǎn):支持word中任何格式的數(shù)據(jù)進(jìn)行轉(zhuǎn)換,且不容易出現(xiàn)錯(cuò)位
- 弊端:需要在服務(wù)器中安裝軟件(本文已centos 8為例,講解。)可以根據(jù)自己的需求,選擇用那種方式。
- 注意 :設(shè)置字體時(shí),最好與轉(zhuǎn)換前文件中的字體一致
若上述yum命令執(zhí)行的時(shí)候報(bào)錯(cuò):
Error: Failed to download metadata for repo ‘appstream’: Cannot prepare internal mirrorlist: No URLs in mirrorlist
則說(shuō)明是官方鏡像地址被移動(dòng)了,不在mirrorlist 這里了,此時(shí)我們只需執(zhí)行,將地址切換到vault 去。
(阿里的鏡像因?yàn)閷?duì)centos8環(huán)境支持的停止,原本的鏡像就被移動(dòng)了。)
cd /etc/yum.repos.d/ sudo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
到此這篇關(guān)于PHP實(shí)現(xiàn)word轉(zhuǎn)pdf的兩種方式的文章就介紹到這了,更多相關(guān)PHP word轉(zhuǎn)pdf內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用PHP獲取Google AJAX Search API 數(shù)據(jù)的代碼
用PHP獲取Google AJAX Search API 數(shù)據(jù)的代碼2010-03-03
PHP分頁(yè)顯示的方法分析【附PHP通用分頁(yè)類】
這篇文章主要介紹了PHP分頁(yè)顯示的方法,結(jié)合實(shí)例形式分析了php數(shù)據(jù)庫(kù)查詢及內(nèi)容結(jié)合HTML分頁(yè)顯示的簡(jiǎn)單操作技巧,并附帶一個(gè)PHP通用分頁(yè)類供大家參考使用,需要的朋友可以參考下2018-05-05
PHP基于MySQLI函數(shù)封裝的數(shù)據(jù)庫(kù)連接工具類【定義與用法】
這篇文章主要介紹了PHP基于MySQLI函數(shù)封裝的數(shù)據(jù)庫(kù)連接工具類,結(jié)合實(shí)例形式分析了php封裝mysqli函數(shù)實(shí)現(xiàn)的數(shù)據(jù)庫(kù)操作類定義及連接、增刪改查數(shù)據(jù)庫(kù)等基本操作用法,需要的朋友可以參考下2017-08-08
php獲取網(wǎng)頁(yè)請(qǐng)求狀態(tài)程序示例
對(duì)于網(wǎng)頁(yè)返回狀態(tài)代碼多數(shù)情況下我們的查看方法就是使用站長(zhǎng)工具或ff瀏覽器等來(lái)查看,極少有人想到自己寫一個(gè)查看狀態(tài)代碼的功能,本文就此簡(jiǎn)述php獲取網(wǎng)頁(yè)請(qǐng)求狀態(tài)程序示例,需要的朋友可以參考下2014-06-06
php基于Snoopy解析網(wǎng)頁(yè)html的方法
這篇文章主要介紹了php基于Snoopy解析網(wǎng)頁(yè)html的方法,實(shí)例分析了使用Snoopy類解析html文件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07

