概述
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支持方面可能不如一些现代工具,但其稳定性和丰富的特性使其仍然是一个值得考虑的选择。