PHP实现HTML转PDF文件的几种实用方法
在Web开发中,将HTML页面转换为PDF文件是一个常见需求,比如生成订单、报告、发票等文档,PHP作为主流的服务端脚本语言,提供了多种工具和库来实现HTML转PDF的功能,本文将介绍几种常用的方法,包括使用成熟的第三方库、浏览器渲染工具以及命令行工具,并分析各自的优缺点和适用场景。
使用mPDF库:简单易用的PHP原生解决方案
mPDF是一个专门为PHP设计的HTML转PDF库,它支持CSS样式、中文、图片、表格等复杂内容,且无需额外依赖服务器环境,是目前PHP开发者最常用的HTML转PDF工具之一。
安装mPDF
通过Composer安装mPDF(推荐方式,可自动管理依赖):
composer require mpdf/mpdf
基本使用示例
以下是一个简单的PHP脚本,将HTML字符串转换为PDF并下载:
<?php
require_once __DIR__ . '/vendor/autoload.php';
// 创建mPDF实例
$mpdf = new \Mpdf\Mpdf();
// 设置PDF的编码(支持中文)
$mpdf->useAdobeCJK = true;
$mpdf->autoScriptToLang = true;
$mpdf->autoLangToFont = true;
// 要转换的HTML内容(可包含CSS样式)
$html = '
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: "SimSun", sans-serif; }
h1 { color: red; text-align: center; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
</style>
</head>
<body>
<h1>HTML转PDF示例</h1>
<p>这是一个由mPDF生成的PDF文档,支持中文和CSS样式。</p>
<table>
<tr><th>姓名</th><th>年龄</th></tr>
<tr><td>张三</td><td>25</td></tr>
<tr><td>李四</td><td>30</td></tr>
</table>
</body>
</html>';
// 将HTML写入PDF
$mpdf->WriteHTML($html);
// 输出PDF(下载或保存)
$mpdf->Output('document.pdf', 'D'); // 'D'表示下载,'F'表示保存到文件
?>
优缺点分析
- 优点:安装简单,支持CSS3、HTML5、中文、图片、表格等,无需额外依赖服务器环境(如Java、Node.js)。
- 缺点:对复杂CSS(如Flexbox、Grid)的支持有限,部分CSS属性可能无法正确渲染。
使用DomPDF库:轻量级HTML渲染方案
DomPDF是另一个流行的PHP HTML转PDF库,它基于HTML和CSS渲染,支持大部分CSS样式,适合生成简单的PDF文档。
安装DomPDF
通过Composer安装:
composer require dompdf/dompdf
基本使用示例
<?php
require_once __DIR__ . '/vendor/autoload.php';
// 使用DomPDF的命名空间
use Dompdf\Dompdf;
// 创建DomPDF实例
$dompdf = new Dompdf();
// 要转换的HTML内容
$html = '
<!DOCTYPE html>
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.header { background-color: #f0f0f0; padding: 10px; }
.content { margin: 20px; }
</style>
</head>
<body>
<div class="header">
<h1>DomPDF示例</h1>
</div>
<div class="content">
<p>这是一个由DomPDF生成的PDF文档。</p>
</div>
</body>
</html>';
// 加载HTML
$dompdf->loadHtml($html);
// 设置PDF纸张大小和方向(可选)
$dompdf->setPaper('A4', 'portrait');
// 渲染PDF
$dompdf->render();
// 输出PDF(下载)
$dompdf->stream('document.pdf', ['Attachment' => true]);
?>
优缺点分析
- 优点:轻量级,支持大部分CSS样式,适合简单文档。
- 缺点:对复杂CSS(如浮动、定位)的支持较差,生成大文档时性能较低,不支持JavaScript。
使用wkhtmltopdf:基于浏览器渲染的高质量方案
wkhtmltopdf是一个开源命令行工具,它通过调用WebKit内核(与Chrome浏览器相同的渲染引擎)将HTML转换为PDF,因此能完美支持CSS3、JavaScript、图片、SVG等复杂内容,适合生成高质量、样式复杂的PDF文档。
安装wkhtmltopdf
- Linux:通过包管理器安装(如Ubuntu:
sudo apt-get install wkhtmltopdf)。 - Windows:从官网(https://wkhtmltopdf.org/)下载安装包并配置环境变量。
- macOS:通过Homebrew安装(
brew install wkhtmltopdf)。
PHP调用wkhtmltopdf
可以通过PHP的exec()或shell_exec()函数调用wkhtmltopdf命令,或使用封装好的PHP库(如wkhtmltopdf/wkhtmltopdf)。
示例1:直接调用命令行
<?php
// 要转换的HTML文件(或字符串)
$html = '<html><body><h1>Hello, wkhtmltopdf!</h1></body></html>';
$htmlFile = 'temp.html';
file_put_contents($htmlFile, $html);
// 调用wkhtmltopdf命令
$command = "wkhtmltopdf --encoding utf-8 {$htmlFile} output.pdf";
exec($command);
// 删除临时文件
unlink($htmlFile);
echo "PDF生成成功:output.pdf";
?>
示例2:使用PHP库封装(推荐)
通过Composer安装wkhtmltopdf的PHP封装库:
composer require wkhtmltopdf/wkhtmltopdf
然后使用:
<?php
require_once __DIR__ . '/vendor/autoload.php';
use mikehaertl\wkhtmlto\Pdf;
// 创建PDF实例
$pdf = new Pdf();
// 设置HTML内容(可以是字符串或URL)
$pdf->setPage('https://www.example.com');
// 设置PDF选项(如纸张大小、边距等)
$pdf->setOptions([
'encoding' => 'UTF-8',
'orientation' => 'portrait',
'page-size' => 'A4',
]);
// 生成PDF并保存
if ($pdf->save('output.pdf')) {
echo "PDF生成成功:output.pdf";
} else {
echo "生成失败:" . $pdf->getError();
}
?>
优缺点分析
- 优点:渲染质量高,完美支持CSS3、JavaScript、图片等,适合复杂文档。
- 缺点:需要安装额外的命令行工具,服务器环境需支持命令行执行(如禁用
exec()函数时无法使用),生成速度较慢。
使用TCPDF:支持高级PDF功能的解决方案
TCPDF是一个功能强大的PHP PDF生成库,它不仅支持HTML转PDF,还支持直接操作PDF对象(如添加表格、图片、条形码等),适合需要高度定制化的场景。
安装TCPDF
通过Composer安装:
composer require tecnickcom/tcpdf
基本使用示例
<?php
require_once __DIR__ . '/vendor/autoload.php';
use setasign\Fpdi\TcpdfFpdi; // 如果需要导入现有PDF
// 创建TCPDF实例
$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// 设置文档信息
$pdf->SetCreator('My Application');
$pdf->SetAuthor('PHP Developer');
$pdf->SetTitle('HTML转PDF示例');
// 添加一页
$pdf->AddPage();
// 输出HTML内容
$html = '
<h1>TCPDF示例</h1>
<p>这是一个由TCPDF生成的PDF文档。</p>
<table border="1">
<tr><th>产品</th><th>价格</th></tr>
<tr><td>PHP</td><td>免费</td></tr>
<tr><td>MySQL</td><td>免费</td></tr>
</table>';
$pdf->writeHTML($html, true, false, true, false, '');
// 输出PDF
$pdf->Output('document.pdf', 'D');
?>
优缺点分析
- 优点:功能强大,支持PDF高级操作(如数字签名、加密、条形码等),适合复杂PDF生成需求。
- 缺点:API相对复杂,学习成本较高,HTML渲染能力不如mPDF



还没有评论,来说两句吧...