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 問題解決 !!!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM