當前位置: 妍妍網 > 碼農

PHP使用mPDF實作PDF檔匯出詳解與套用

2024-06-29碼農

概述

mPDF是一個強大的PHP庫,它能夠將UTF-8編碼的HTML內容轉換為PDF檔。這個庫基於FPDF和HTML2FPDF,由Lan Back開發,並在GNU GPL v2授權下釋出。mPDF以其豐富的功能和靈活性,成為PHP開發者在生成PDF檔時的首選之一。

功能特點

mPDF不僅僅是一個簡單的HTML到PDF的轉換工具,它還提供了一系列的增強功能:

  • 高級CSS支持 :mPDF支持大部份CSS內容,使得從網頁到PDF的轉換更加流暢。

  • 影像和HTML內容 :可以輕松地在PDF中嵌入影像和HTML內容。

  • 多列布局 :支持建立多列文件,類似於報紙的布局。

  • 表單建立 :允許在PDF中建立和處理表單。

  • 浮水印和背景 :可以為PDF頁面添加浮水印和背景影像。

  • 系統要求

    在使用mPDF之前,需要確保您的PHP環境滿足以下要求:

  • PHP版本需在5.6以上,且低於7.3.0,適用於mPDF 7.0及以上版本。

  • PHP 7.3及以上版本也得到了支持。

  • 必須載入 mbstring gd 擴充套件。

  • 對於一些高級特性,可能還需要 zlib bcmath xml 等擴充套件。

  • 安裝

    composer require mpdf/mpdf

    使用

    基礎使用

    使用mPDF生成PDF非常簡單。以下是一個基本的使用範例:

    <?php
    require_once __DIR__ . '/vendor/autoload.php';
    $mpdf = new \Mpdf\Mpdf();
    $mpdf->WriteHTML('<h1>Hello world!</h1>');
    $mpdf->Output();

    這段程式碼將在瀏覽器中以 application/pdf 的Content-type輸出PDF檔。

    HTML檔使用

    <?php
    /**
     * @desc pdf.php 描述資訊
     * @author Tinywan(ShaoBo Wan)
     * @date 2024/6/28 22:37
     */

    declare(strict_types=1);
    useMpdf\Mpdf;
    useMpdf\Output\Destination;
    require_once__DIR__ . '/../vendor/autoload.php';
    $html = file_get_contents( './pdf01.html');
    $mPdf = new Mpdf();
    // 載入HTML檔
    $mPdf->WriteHTML($html);
    // 輸出PDF檔
    $mPdf->Output('./pdf01.pdf', Destination::FILE);


    pdf01.html 樣版檔

    <!DOCTYPE html>
    <html>
    <head>
    <metacharset="UTF-8">
    <title>Tinywan PHP library generating PDF files from UTF-8 encoded HTML</title>
    </head>
    <body>
    <h1>PHP library generating PDF files from UTF-8 encoded HTML</h1>
    <ul>
    <li>1. Additional extensions may be dded resources such as fonts</li>
    <li>2. Official installation method is via composer and its packagist package mpdf/mpdf.:24</li>
    <li>3. The simplest usage (since version 7.0) of the library would be as follows </li>
    </ul>
    </body>
    </html>

    輸出PDF檔 pdf01.pdf

    pdf02.html 樣版檔

    <!DOCTYPE html>
    <html>
    <head>
    <metacharset="UTF-8">
    <title>開源技術小棧</title>
    </head>
    <body>
    <h1>開源技術小棧</h1>
    <tablecellspacing="0"border="1"width="100%">
    <tr>
    <th>序號</th>
    <th>名稱</th>
    <th>計畫地址</th>
    </tr>
    <tr>
    <td>1</td>
    <td>JWT 認證外掛程式</td>
    <td>https://www.workerman.net/plugin/6</td>
    </tr>
    <tr>
    <td>2</td>
    <td>Validate 驗證器外掛程式</td>
    <td>https://www.workerman.net/plugin/7</td>
    </tr>
    <tr>
    <td>3</td>
    <td>Casbin 許可權外掛程式(Casbin官方)</td>
    <td>https://www.workerman.net/plugin/8</td>
    </tr>
    </table>
    </body>
    </html>

    可以看出中文和符號亂碼變成了小方塊。關於mpdf中文和符號亂碼需要指定三個參數

    $mPdf = new Mpdf([
    'autoScriptToLang' => true,
    'autoLangToFont' => true,
    'useSubstitutions' => true,
    ]);

    重新打印輸出就正常了

    設定字型和紙張大小

    $mPdf = new Mpdf([
    'autoScriptToLang' => true,
    'autoLangToFont' => true,
    'useSubstitutions' => true,
    'mode' => 'UTF-8',
    'format' => 'A4',
    'default_font_size' => 16,
    'default_font' => '宋體'
    ]);

    使用PHP樣版檔

    pdf03.html 樣版檔

    <!DOCTYPE html>
    <htmllang="en">
    <head>
    <metacharset="UTF-8">
    <title>開源技術小棧樣版替換</title>
    </head>
    <body>
    <h1>使用者名稱:{%username%}</h1>
    <h1>年齡:{%age%}</h1>
    <h1>地址:{%address%}</h1>
    </body>
    </html>

    PHP渲染檔 pdf.php

    <?php
    /**
     * @desc pdf.php 描述資訊
     * @author Tinywan(ShaoBo Wan)
     * @date 2024/6/28 22:37
     */

    declare(strict_types=1);
    useMpdf\Mpdf;
    useMpdf\Output\Destination;
    require_once__DIR__ . '/../vendor/autoload.php';
    $hmltTpmFile = file_get_contents('./pdf03.html');
    $search = [
    '{%username%}',
    '{%age%}',
    '{%address%}',
    ];
    $username = 'Tinywan';
    $age = date('Y-m-d H:i:s');
    $address = '浙江省杭州市西湖區夢想小鎮';
    $replace = [
    $username,
    $age,
    $address,
    ];
    // 替換樣版
    $html = str_replace($search, $replace, $hmltTpmFile);
    $mPdf = new Mpdf([
    'autoScriptToLang' => true,
    'autoLangToFont' => true,
    'useSubstitutions' => true,
    'format' => 'A4',
    'default_font_size' => 14,
    'default_font' => '宋體'
    ]);
    // 載入HTML檔
    $mPdf->WriteHTML($html);
    // 輸出PDF檔
    $mPdf->Output('./pdf03.pdf', Destination::FILE);




    輸出PDF檔 pdf03.pdf

    小結

    mPDF是一個功能齊全的PHP庫,適合需要在PHP計畫中生成PDF檔的開發者。盡管它在CSS支持方面可能不如一些現代工具,但其穩定性和豐富的特性使其仍然是一個值得考慮的選擇。