前言
吐槽下這兩天做的一個項目,大致就是做的一個面向公眾的涂鴉作品(拍照上傳)收集的H5,這個H5有生成證書的功能,還有生成海報的功能,在海報那個地方遇到了不小的挫折,今天不說這個了,說下另外一個問題,
TCPDF
問題
項目進入維護期了,客戶想要把當時收集用戶信息時簽訂的線上協(xié)議導(dǎo)出來,協(xié)議這種東西,最好的存檔格式就是
TCPDF
,所以決定還是用它,項目是基于laravel6.0開發(fā)的,本來是有compposer庫可用的,但是無奈啊,庫需要的PHP版本PHP7.3+
......艸艸艸艸,不用了.
下載代碼->寫方法->寫頁面->導(dǎo)出.一切正常,沒有問題了,可以交付了吧,但是我突然發(fā)現(xiàn),文件居然是用的時間戳命名的,這肯定不合適啊...然后就想著換成用戶名稱+協(xié)議名稱.pdf就好了啊,但是萬萬沒想到,導(dǎo)出時只剩.pdf了 那我的文件名呢???
解決
滿世界找了一圈方法,后來發(fā)現(xiàn)
TCPDF
確實是存在這種問題的,那就把我找到的方法分享下吧
找到tcpdf源碼目錄下的
tcpdf.php
,修改其中的一些代碼(僅修改Output()方法)就ok了
- 刪除或注釋過濾操作
下面這段代碼會把所有中文字符都替換成空字符,作為首要的罪魁禍首,果斷注釋
if ($dest[0] != 'F') {
$name = preg_replace('/[\s]+/', '_', $name);
$name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name);
}
- 修改header
去掉以下代碼中的
basename()
函數(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)出了