PHP實現(xiàn)word轉(zhuǎn)pdf的兩種方式(有用!)
方法一、使用phpword和tcpdf
1. 使用composer 安裝 phpword和tcpdf
composer require phpoffice/phpword composer require tecnickcom/tcpdf
2. 示例代碼 (試例框架是laravel,以下文件默認是放置在public中)
// 你的初始文件地址 $word = 'test.docx'; \PhpOffice\PhpWord\Settings::setPdfRendererPath(base_path('vendor/tecnickcom/tcpdf')); //設(shè)置轉(zhuǎn)換pdf的類庫名(DomPDF、MPDF、TCPDF)需要下載對應(yīng)的類庫 \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è)置字體
亂碼一般是因為字體問題
1、從網(wǎng)上下載一個ttf文
2、找到 /vendor/tecnickcom/tcpdf/tools 的位置,將字體文件放在這個文件夾下,在此處打開窗口執(zhí)行命令
php ./tcpdf_addfont.php -b -t wryh -i wryh.ttf
之后就可以在 /vendor/tecnickcom/tcpdf/fonts/ 文件夾下找到三個同名的 wryh.ctg.z,wryh.php,wryh.z文件
3、然后你在執(zhí)行代碼時,設(shè)置
$pdfWriter->SetFont(‘wryh’,‘’,20,‘’,false);
指明使用該字體即可。
方法二、使用unoconv將 word轉(zhuǎn)pdf (Centos 8)
1. 安裝libreoffice 安裝libreoffice
先為安裝 libreoffice 創(chuàng)建一個文件夾,用以保存下載的壓縮包 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 能顯示出來 libreoffice 的版本,則安裝成功
2.安裝 unoconv
centos 8 中 使用 yum 安裝 unoconv 無效,所有我么使用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 新文件存儲的位置 要轉(zhuǎn)換的文件的位置; unoconv -f pdf -o /root/1.pdf /root/1.docx 查看新文件是否存在,確認是否轉(zhuǎn)換成功
3.安裝字體 (若轉(zhuǎn)換的文件出現(xiàn)) 創(chuàng)建字體目錄,將自己的字體文件上傳至該文件夾下
mkdir -p /usr/share/fonts/win
執(zhí)行以下命令,使字體生效
mkfontscale mkfontdir sudo fc-cache -fv
【報錯】
若執(zhí)行 mkfontscale 出現(xiàn)報錯 mkfontscale not found
則執(zhí)行下列命令
# 安裝mkfontscale yum install mkfontscale # 安裝fontconfig yum install fontconfig
4. 使用代碼將文件轉(zhuǎn)換
/** 文件格式轉(zhuǎn)換 * @param $old_file 舊文件 當(dāng)前項目絕對地址 * @param $new_file 新文件 當(dāng)前項目中的絕對地址 * @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)點:操作較為簡單,只需安裝一些php的擴展就可以使用,
- 弊端:但是該方法只適合一些word中內(nèi)容比較簡單的進行轉(zhuǎn)義為pdf,因為數(shù)據(jù)格式復(fù)雜之后,會容易發(fā)生文字錯位的問題。
方法二:
- 優(yōu)點:支持word中任何格式的數(shù)據(jù)進行轉(zhuǎn)換,且不容易出現(xiàn)錯位
- 弊端:需要在服務(wù)器中安裝軟件(本文已centos 8為例,講解。)可以根據(jù)自己的需求,選擇用那種方式。
- 注意 :設(shè)置字體時,最好與轉(zhuǎn)換前文件中的字體一致
若上述yum命令執(zhí)行的時候報錯:
Error: Failed to download metadata for repo ‘appstream’: Cannot prepare internal mirrorlist: No URLs in mirrorlist
則說明是官方鏡像地址被移動了,不在mirrorlist 這里了,此時我們只需執(zhí)行,將地址切換到vault 去。
(阿里的鏡像因為對centos8環(huán)境支持的停止,原本的鏡像就被移動了。)
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實現(xiàn)word轉(zhuǎn)pdf的兩種方式的文章就介紹到這了,更多相關(guān)PHP word轉(zhuǎn)pdf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
調(diào)整優(yōu)化您的LAMP應(yīng)用程序的5種簡單方法
Wikipedia、Facebook 和 Yahoo! 等主要 web 屬性使用 LAMP 架構(gòu)來為每天數(shù)百萬的請求提供服務(wù),而 Wordpress、Joomla、Drupal 和 SugarCRM 等 web 應(yīng)用程序軟件使用其架構(gòu)來讓組織輕松部署基于 web 的應(yīng)用程序。2011-06-06PHP判斷一個變量是否為整數(shù)、正整數(shù)的方法示例
這篇文章主要給大家介紹了關(guān)于PHP判斷一個變量是否為整數(shù)、正整數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用PHP具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09關(guān)于ob_get_contents(),ob_end_clean(),ob_start(),的具體用法詳解
本篇文章是對ob_get_contents(),ob_end_clean(),ob_start(),的具體用法進行了詳細的分析介紹,需要的朋友參考下2013-06-06