前言
吐槽下这两天做的一个项目,大致就是做的一个面向公众的涂鸦作品(拍照上传)收集的H5,这个H5有生成证书的功能,还有生成海报的功能,在海报那个地方遇到了不小的挫折,今天不说这个了,说下另外一个问题,
TCPDF
问题
项目进入维护期了,客户想要把当时收集用户信息时签订的线上协议导出来,协议这种东西,最好的存档格式就是
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.'"'); //换成这行
最后
就这样了,没啥说的,反正是可以正常导出了
网友评论