美文网首页
php使用tcpdf导出pdf文件无法使用中文名称的解决办法

php使用tcpdf导出pdf文件无法使用中文名称的解决办法

作者: 是彬不是杉 | 来源:发表于2020-11-06 09:09 被阅读0次

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

    前言

    吐槽下这两天做的一个项目,大致就是做的一个面向公众的涂鸦作品(拍照上传)收集的H5,这个H5有生成证书的功能,还有生成海报的功能,在海报那个地方遇到了不小的挫折,今天不说这个了,说下另外一个问题,TCPDF

    问题

    项目进入维护期了,客户想要把当时收集用户信息时签订的线上协议导出来,协议这种东西,最好的存档格式就是PDF了,因为之前也用过TCPDF,所以决定还是用它,项目是基于laravel6.0开发的,本来是有compposer库可用的,但是无奈啊,库需要的PHP版本 PHP7.3+ ......艹艹艹艹,不用了.

    下载代码->写方法->写页面->导出.一切正常,没有问题了,可以交付了吧,但是我突然发现,文件居然是用的时间戳命名的,这肯定不合适啊...然后就想着换成用户名称+协议名称.pdf就好了啊,但是万万没想到,导出时只剩.pdf了 那我的文件名呢???

    解决

    满世界找了一圈方法,后来发现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()函数,说实话我不知道为啥要去掉...附上basename()函数的解释吧 https://www.runoob.com/php/func-filesystem-basename.html

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

    换成

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

    最后

    就这样了,没啥说的,反正是可以正常导出了

    相关文章

      网友评论

          本文标题:php使用tcpdf导出pdf文件无法使用中文名称的解决办法

          本文链接:https://www.haomeiwen.com/subject/qegzvktx.html