PHP中的PDF生成:库概述与实践示例
创建PDF文档是Web开发中的常见任务之一。从账单和报告到证书和书籍,PDF仍然是文档交换的通用格式。在PHP中,有几个强大的库允许从HTML或通过编程方式生成PDF。在本文中,我们将分析四种流行的工具:TCPDF、FPDF、Dompdf和mPDF。
1. FPDF — 轻量且快速的经典
FPDF 是最古老、最简单的库之一。它不需要安装额外的扩展(除了GD)。主要优点是极简和速度。FPDF直接处理坐标,从而完全控制元素的位置。
创建简单PDF的示例:
<?phprequire('fpdf.php');
$pdf = new FPDF();$pdf->AddPage();$pdf->SetFont('Arial', 'B', 16);$pdf->Cell(40, 10, '你好,世界!');$pdf->Output();?>优点:
- 非常小的体积(约100 KB)
- 不需要外部依赖
- 通过单独的字体支持UTF-8
缺点:
- 处理HTML复杂
- 对CSS的支持有限
2. TCPDF — 强大且功能丰富
TCPDF 是FPDF的增强版本,支持UTF-8、HTML、CSS、图像、二维码、数字签名等。它是复杂文档的标准选择。
使用HTML的示例:
<?phprequire_once('tcpdf/tcpdf.php');
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);$pdf->AddPage();$pdf->writeHTML('<h1>标题</h1><p>这是一个包含<b>粗体</b>文本的段落。</p>');$pdf->Output('example.pdf', 'I');?>特点:
- 完全支持Unicode和RTL(阿拉伯语、希伯来语)
- 内置字体(DejaVu、FreeSerif)
- 支持SVG、JavaScript、表单
3. Dompdf — 从HTML/CSS生成
Dompdf 将HTML和CSS转换为PDF。如果您已经有页面布局或模板,这是理想的选择。Dompdf支持大多数CSS属性,但并非全部(例如,Flexbox和Grid可能无法正常工作)。
示例:
<?phprequire 'vendor/autoload.php';
use Dompdf\\Dompdf;
$dompdf = new Dompdf();$html = '<h2 style="color:red;">红色标题</h2><p>带缩进的文本。</p>';$dompdf->loadHtml($html);$dompdf->setPaper('A4', 'portrait');$dompdf->render();$dompdf->stream("document.pdf");?>优点:
- 简单:编写HTML,获得PDF
- 对表格和图像的良好支持
缺点:
- 需要PHP 7.1+以及mbstring、dom扩展
- 复杂的CSS布局可能会出错
4. mPDF — 混合方法
mPDF 是一个结合了TCPDF和Dompdf功能的库。它能够很好地处理HTML和CSS,支持Unicode、表格、页眉页脚、水印。mPDF特别适合创建书籍和杂志。
使用CSS的示例:
<?phprequire_once __DIR__ . '/vendor/autoload.php';
$mpdf = new \\Mpdf\\Mpdf();$html = '<div style="border:1px solid #000; padding:10px;">块内容</div>';$mpdf->WriteHTML($html);$mpdf->Output('output.pdf', 'I');?>优势:
- 出色的CSS 2.1支持和部分CSS3支持 <