• Thinkphp5.1使用TCPDF类库生成PDF文件


    来源:https://blog.csdn.net/qq_23564667/article/details/107524645

    在做项目中,由于使用的是thinkphp5.1框架,使用tcpdf生成的pdf文件在浏览器里显示输出文件流字符串;
    这个问题只要:关闭调试模式即可

    在ThinkPHP5.1上使用TCPDF,具体流程如下:

    1、通过Composer下载最新版TCPDF,切换到程序根目录运行如下命令:

    composer require tecnickcom/tcpdf

     命令成功执行后,TCPDF会被下载到程序根目录中的vendor文件夹,如图:

    examples中有60多个典型示例,需要什么功能直接看例子即可,例子对应列表见TCPDF官网:https://tcpdf.org/examples/

    2.在控制器中调用TCPDF。

    function get_pdf_test(){
            $html = <<<EOD
    <h1>hello word 你好啊</h1>
    EOD;
            //新建一个PDF文档
            //L 横排   P竖排
            $orientation='P';
            $unit='mm';
            $format='A4';
            $unicode=true;
            $encoding='UTF-8';
            $diskcache=false;
            $pdfa=false;
            $pdf = new TCPDF($orientation, $unit, $format, $unicode, $encoding, $diskcache, $pdfa);
    
            $pdf->AddPage();
            $pdf->SetFont('stsongstdlight', '', 14); // 使用中文字体,不设置这个,中文就会乱码
            //如果要对html指定 宽度  writeHTMLCell更方便
            $pdf->writeHTMLCell(0, 0, 0, 0, $html, 0, 0, 0, true, '', true);
            //直接输入到浏览器
            //PDF输出   I:在浏览器中打开,D:下载,F:在服务器生成pdf ,S:只返回pdf的字符串
            $pdf->Output('demo.pdf', 'I');
        }

    效果

    3、中文乱码的问题

     $pdf->SetFont('stsongstdlight', '', 14); // 使用中文字体,不设置这个,中文就会乱码

    4、TCPDF不能保存中文文件名的解决方法

    打开tcpdf.php文件,找到output函数,大约在7554行。

    1、注释以下代码,大约在7565-7568行:

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

    2、搜索该方法代码,替换如下代码

    header('Content-Disposition: attachment; filename="'.basename($name).'"'); 

    替换为

    header('Content-Disposition: attachment; filename="'.($name).'"'); 

     如果需要保存到服务器上的话

    在Output前添加一个函数ob_clean(),代码如下:

    //如果需要自定义路径,则添加根目录地址
    //服务器存档模式
    ob_clean();
    $pdf->Output($_SERVER['DOCUMENT_ROOT'] .'output.pdf', 'F'); 
    //存档在根目录
    $pdf->Output($_SERVER['DOCUMENT_ROOT'].'/MyFolder/output.pdf', 'F'); 
    //存档在自定义文件夹中;

    如果保存到服务器上出错的话:

    看到网上的解决方案 :

    参考资料 : https://www.e-learn.cn/conten...

    可以使用 :

    $pdf->Output(__DIR__ . '/invoices/Delivery Note.pdf', 'F');

    我发现的问题是
    fopen() 函数打开文件或者 URL。
    如果打开文件 : 则必须是 该文件的 绝对路径

    ok 问题解决 !!!!!

  • 相关阅读:
    HDU 3853 LOOPS:期望dp【网格型】
    SGU 495 Kids and Prizes:期望dp / 概率dp / 推公式
    BZOJ 1629 [Usaco2005 Nov]Cow Acrobats:贪心【局部证明】
    BZOJ 3400 [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队:dp【和为f的倍数】
    BZOJ 1685 [Usaco2005 Oct]Allowance 津贴:贪心【给硬币问题】
    codeforces-473D Mahmoud and Ehab and another array construction task (素数筛法+贪心)
    poj1964最大子矩阵 (单调栈加枚举)
    poj3111 选取物品(二分+贪心)
    codeforces-777E Hanoi Factory (栈+贪心)
    poj3040 发工资(贪心)
  • 原文地址:https://www.cnblogs.com/laijinquan/p/13476136.html
Copyright © 2020-2023  润新知