php使用tcpdf導(dǎo)出pdf文件無法使用中文名稱的解決辦法

原文鏈接 https://www.whongbin.cn/article-detail/149.html

前言

吐槽下這兩天做的一個(gè)項(xiàng)目,大致就是做的一個(gè)面向公眾的涂鴉作品(拍照上傳)收集的H5,這個(gè)H5有生成證書的功能,還有生成海報(bào)的功能,在海報(bào)那個(gè)地方遇到了不小的挫折,今天不說這個(gè)了,說下另外一個(gè)問題,TCPDF

問題

項(xiàng)目進(jìn)入維護(hù)期了,客戶想要把當(dāng)時(shí)收集用戶信息時(shí)簽訂的線上協(xié)議導(dǎo)出來,協(xié)議這種東西,最好的存檔格式就是PDF了,因?yàn)橹耙灿眠^TCPDF,所以決定還是用它,項(xiàng)目是基于laravel6.0開發(fā)的,本來是有compposer庫可用的,但是無奈啊,庫需要的PHP版本 PHP7.3+ ......艸艸艸艸,不用了.

下載代碼->寫方法->寫頁面->導(dǎo)出.一切正常,沒有問題了,可以交付了吧,但是我突然發(fā)現(xiàn),文件居然是用的時(shí)間戳命名的,這肯定不合適啊...然后就想著換成用戶名稱+協(xié)議名稱.pdf就好了啊,但是萬萬沒想到,導(dǎo)出時(shí)只剩.pdf了 那我的文件名呢???

解決

滿世界找了一圈方法,后來發(fā)現(xiàn)TCPDF確實(shí)是存在這種問題的,那就把我找到的方法分享下吧

找到tcpdf源碼目錄下的 tcpdf.php,修改其中的一些代碼(僅修改Output()方法)就ok了

  • 刪除或注釋過濾操作

下面這段代碼會把所有中文字符都替換成空字符,作為首要的罪魁禍?zhǔn)?/strong>,果斷注釋

if ($dest[0] != 'F') {
    $name = preg_replace('/[\s]+/', '_', $name);
    $name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name);
}
  • 修改header

去掉以下代碼中的basename()函數(shù),說實(shí)話我不知道為啥要去掉...附上basename()函數(shù)的解釋吧 https://www.runoob.com/php/func-filesystem-basename.html

header('Content-Disposition: attachment; filename="'.basename($name).'"'); //注釋這行

換成

header('Content-Disposition: attachment; filename="'.$name.'"'); //換成這行

最后

就這樣了,沒啥說的,反正是可以正常導(dǎo)出了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容