前言
吐槽下這兩天做的一個(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é)議這種東西,最好的存檔格式就是
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)出了