jrue
  • 159

PHP生成PDF

1.PHP的PDF-API

2.使用MPDF类生成PDF的方法

mPDF是一个PHP类,它可以从UTF-8编码的HTML生成PDF文件,它基于FPDF和HTML2FPDF,并具有许多增强功能。对于语言处理和UTF-8支持,mpdf优于FPDF。对于CJK支持,它不仅支持字体嵌入,而且支持字体子集(所以您的CJK PDF不会过大)。
$config = [
    // 支持中文设置 
    "autoScriptToLang" => true, 
    // 支持中文设置(中文乱码时,设置为true)
    "autoLangToFont" => true,
    "setAutoTopMargin" => "stretch",
    "setAutoBottomMargin" => "stretch",
    "autoMarginPadding" => 5,
    "margin_left" => 5,
    "margin_right" => 5
];
$mpdf = new \Mpdf\Mpdf($config);

// 设置页眉和页脚
$mpdf->SetHTMLHeader($header);
$mpdf->SetHTMLFooter($footer);
// 分两列写入
$mpdf->SetColumns(2);
$mpdf->WriteHTML($html);
// I'表示在线展示 'D'则显示下载窗口 'F'保存本地文件
$mpdf->Output('PDF的名称.pdf', 'I');

3.MPDF自定义字体

<?php
namespace App\Http\Controllers;

use Mpdf\Mpdf;
use Mpdf\Config\FontVariables;
use Mpdf\Config\ConfigVariables;

class ExampleController extends Controller
{
    public function readPDF()
    {
        // 字体文字所在目录
        $defaultConfig = (new ConfigVariables())->getDefaults();
        $fontDirs = $defaultConfig['fontDir'];
        
        // 配置的字体
        $defaultFontConfig = (new FontVariables())->getDefaults();
        $fontData = $defaultFontConfig['fontdata'];
        $mpdf = new Mpdf([
            // 配置自定义字体,“lt-liti”只能是小写,不然乱码
            'fontdata' => $fontData + [
                'st-liti' => [
                    'R' => '华文隶书.TTF',
                ]
            ],
            'default_font' => 'st-liti',
            // 设置下面两个值为false,方能启用自定义字体
            "autoScriptToLang"=>false,
            "autoLangToFont"=>false,
            "setAutoTopMargin"=>"stretch",
            "setAutoBottomMargin"=>"stretch",
            "autoMarginPadding"=>5,
            "margin_left" => 5,
            "margin_right" => 5
        ]);

4.MPDF相关文档

阅读 187

推荐阅读