前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP使用mPDF实现PDF文件导出详解与应用

PHP使用mPDF实现PDF文件导出详解与应用

作者头像
Tinywan
发布2024-07-05 12:43:31
1040
发布2024-07-05 12:43:31
举报
文章被收录于专栏:开源技术小栈开源技术小栈

概述

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环境满足以下要求:

  • PHP5.6以上,且低于7.3.0,适用于mPDF 7.0。
  • PHP 7.3及以上版本也得到了支持。
  • 必须加载mbstringgd扩展。
  • 对于一些高级特性,可能还需要zlibbcmathxml等扩展。

安装

代码语言:javascript
复制
composer require mpdf/mpdf

使用

基础使用

使用mPDF生成PDF非常简单。以下是一个基本的使用示例:

代码语言:javascript
复制
<?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文件使用
代码语言:javascript
复制
<?php
/**
 * @desc pdf.php 描述信息
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/6/28 22:37
 */
declare(strict_types=1);

use Mpdf\Mpdf;
use Mpdf\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 模板文件

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <meta charset="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 模板文件

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>开源技术小栈</title>
</head>
<body>
<h1>开源技术小栈</h1>
<table cellspacing="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中文和符号乱码需要指定三个参数

代码语言:javascript
复制
$mPdf = new Mpdf([
    'autoScriptToLang' => true,
    'autoLangToFont'   => true,
    'useSubstitutions' => true,
]);

重新打印输出就正常了

设置字体和纸张大小

代码语言:javascript
复制
$mPdf = new Mpdf([
    'autoScriptToLang' => true,
    'autoLangToFont'   => true,
    'useSubstitutions' => true,
    'mode' => 'UTF-8',
    'format' => 'A4',
    'default_font_size' => 16,
    'default_font' => '宋体'
]);
使用PHP模板文件

pdf03.html 模板文件

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>开源技术小栈模板替换</title>
</head>
<body>
<h1>用户名:{%username%}</h1>
<h1>年龄:{%age%}</h1>
<h1>地址:{%address%}</h1>
</body>
</html>

PHP渲染文件pdf.php

代码语言:javascript
复制
<?php
/**
 * @desc pdf.php 描述信息
 * @author Tinywan(ShaoBo Wan)
 * @date 2024/6/28 22:37
 */
declare(strict_types=1);

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 功能特点
  • 系统要求
  • 安装
  • 使用
    • 基础使用
      • HTML文件使用
        • 使用PHP模板文件
        • 小结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档