各位前輩們請教一下,我用php透過wkhtmltopdf套件來產生pdf
我開發用的電腦是win10 64bit,PHP 7,wkhtmltopdf版本0.12.6
正式機是Ubuntu 20.04.1 LTS,PHP 7,wkhtmltopdf版本0.12.5
(原本想用docker模擬開發環境,但意外的還沒搞定@@ 先擱著有空再回頭處理...)
再開發時產生pdf沒問題
但是上傳到正式機後,
執行過程不會出錯,
但產生的pdf就是開不了,
先上code
/**
* 將網址轉成pdf,透過wkHtmlToPdf工具
*
* @param string $url 內容網址
* @param string $path 存檔路徑
* @param string $coverUrl 封面網址
* @return void
*/
public static function url2pdf($url, $path, $coverUrl)
{
$wkhtmltopdfExe = 'xvfb-run -a wkhtmltopdf '; //xvfb-run -a
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'){
$wkhtmltopdfExe = 'C:\VisualHosts\tool\wkhtmltopdf.exe ';
}
$command = "$wkhtmltopdfExe"
. " --cookie PHPSESSID " . (in_array('PHPSESSID', $_COOKIE)? $_COOKIE['PHPSESSID'] : 'fapdce734t1f6475tbk90cjnt5')
. ' --page-size A4' // 設定紙張大小
. ' --disable-smart-shrinking' // 禁止縮放
. ' --image-dpi 150 ' //指定尺寸的图片(默认值是 600)
. ' --lowquality ' // 低質量輸出,讓檔案小一點(畫質可能差一點)
. ' --load-error-handling ignore'// <handler> 指定当页面加载失败后的动作,可以指定为:abort(中止)、ignore(忽略)、skip(跳过);(默认值是:abort)
. ' --enable-local-file-access --allow ' // 同意可使用本地文件,避免出現Warning: Blocked access to file
// ==== 封面 ====
. " cover \"$coverUrl\""
// ==== 目錄 ====
. " toc "
. ' --xsl-style-sheet '. __DIR__ . DIRECTORY_SEPARATOR .'pdfTocStyle.xsl' // 目錄樣式,主要為了調整字體,不然直接使用"--toc-header-text '目錄標題'"就可以了
// ==== 內容 ====
. " \"$url\" " // 來源
. " --footer-center [sitepage]" // 頁碼 ([sitepage]:該來源的當前頁數 [page]:輸出的當前頁數 [topage]:輸出的總頁數)
// ==== 輸出 ====
. " \"$path\""; // 存放位置
$printMessage = shell_exec($command);
echo $printMessage;
}
如果不加上xvfb-run
的話產生的pdf我沒有程式可以正常的打開,
加上的話chrome開不了,但可用pdf-XChange工具可以開啟
開啟的錯誤內容如下
The switch --disable-smart-shrinking, is not support using unpatched qt, and will be ignored.
The switch --image-dpi, is not support using unpatched qt, and will be ignored.
The switch --xsl-style-sheet, is not support using unpatched qt, and will be ignored.
The switch --footer-center, is not support using unpatched qt, and will be ignored.
QStandardPaths :
XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime—www—data'
Error: This version of wkhtmltopdf is build against an unpatched version of QT, and does not support more then one input document. Exit with code 1, due to unknown error.
錯誤訊息簡單說就是此版本的wkhtmltopdf是針對未修補的QT版本構建的,並且不支持一個以上的輸入文檔。
--disable-smart-shrinking、--image-dpi 被忽略的話檔案會挺肥的,有沒有別的方式瘦身?
--xsl-style-sheet 被忽略就沒有目錄了,不過可以用--toc-header-text '目錄標題'
替代(還沒試),但樣式...乾脆不要目錄免得被噴的更慘...
--footer-center 被忽略就沒有頁尾的頁碼了,鐵定被噴
不支援超過1個的輸入...捨棄目錄,封面可以跟內容做一起,這樣就單一輸入,但用戶要求封面不要有頁碼,頁碼從第二頁開始算第一頁...沒試成功,可能不支援,所以封面跟內容一定要分開,然後套footer-center....
請問我wkhtmltopdf的語法要怎麼修改比較好?
或是大家怎麼產生pdf的??
有用過dompdf...坑XD
最新版中文亂碼樣式大亂不知怎麼解決只好回頭繼續用舊版(支援php5.5的最後一版)
但舊版只支援部分html4 + 部分css2,
且動態表格若字數太多樣式會有異常,遇上動態大表格則會異常的緩慢,還有不支援頁碼...用戶一直噴...