以下是使用PHP生成PDF和Excel文件的详细指南,涵盖常用库、实现方法、代码示例及常见问题解决方案:
一、生成PDF文件
1. 常用库及选择建议
根据资料,主流的PHP PDF生成库包括:
- FPDF:轻量级,无需依赖,适合简单PDF生成,但需手动布局。
- TCPDF:FPDF的扩展,支持HTML/CSS、UTF-8、自动分页,适合复杂文档。
- Dompdf:基于HTML转PDF,支持CSS2.1和部分CSS3,适合已有HTML模板的场景。
- mPDF:支持UTF-8和复杂排版,适合多语言和高级样式需求。
- wkhtmltopdf:通过WebKit引擎渲染HTML生成PDF,支持JavaScript,但需命令行调用。
选择建议:
- 简单需求:FPDF。
- 复杂布局:TCPDF或mPDF。
- HTML转PDF:Dompdf或wkhtmltopdf。
2. 安装方法
- FPDF:从官网下载
fpdf.php
并引入项目。 - TCPDF/Dompdf/mPDF:通过Composer安装:
composer require tecnickcom/tcpdf # TCPDF
composer require dompdf/dompdf # Dompdf
composer require mpdf/mpdf # mPDF
3. FPDF基础示例
<?php
require('fpdf.php');
class PDF extends FPDF {
function Header() {
$this->SetFont('Arial', 'B', 12);
$this->Cell(0, 10, 'PDF Header', 0, 1, 'C');
}
}
$pdf = new PDF();
$pdf->AddPage();
$pdf->SetFont('Arial', '', 12);
$pdf->Cell(0, 10, 'Hello World!', 0, 1);
$pdf->Output('D', 'example.pdf'); // 'D'表示直接下载
?>
此示例创建带页眉的PDF。
4. 常见问题及解决
中文乱码:使用支持中文的字体(如stsongstdlight
),并设置UTF-8编码:
$pdf->AddFont('stsongstdlight', '', 'stsongstdlight.php');
$pdf->SetFont('stsongstdlight', '', 12);
-
性能优化:分页生成、缓存重复元素,避免一次性加载大量数据。
二、生成Excel文件
1. 常用库及选择建议
根据资料,主流库包括:
- PHPExcel:已停止维护,建议迁移到PhpSpreadsheet。
- PhpSpreadsheet:PHPExcel的现代替代品,支持XLSX、ODS等格式,功能丰富。
- 原生CSV输出:简单快速,但无法设置复杂格式。
选择建议:
- 新项目:PhpSpreadsheet。
- 旧项目维护:PHPExcel(需注意兼容性)。
2. PhpSpreadsheet安装
通过Composer安装:
composer require phpoffice/phpspreadsheet
3. PhpSpreadsheet基础示例
<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 设置表头和数据
$sheet->setCellValue('A1', '姓名');
$sheet->setCellValue('B1', '年龄');
$sheet->setCellValue('A2', '张三');
$sheet->setCellValue('B2', 25);
// 设置样式
$sheet->getStyle('A1:B1')->getFont()->setBold(true);
// 输出为Excel文件
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="example.xlsx"');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
此示例生成带加粗表头的Excel文件。
4. 常见问题及解决
内存溢出:分块处理数据,或使用缓存:
$writer = new Xlsx($spreadsheet);
$writer->setPreCalculateFormulas(false); // 禁用公式预计算
-
兼容性问题:确保输出格式(如XLSX)与目标Excel版本匹配。
-
中文乱码:设置单元格编码为UTF-8,或使用
mb_convert_encoding
转换数据。
三、对比与总结
PDF库对比
特性 | FPDF | TCPDF | Dompdf | mPDF |
---|---|---|---|---|
HTML支持 | 无 | 部分 | 是 | 是 |
UTF-8支持 | 需手动配置 | 是 | 是 | 是 |
中文兼容性 | 需额外字体 | 内置支持 | 需配置字体 | 内置支持 |
适用场景 | 简单文档 | 复杂布局 | HTML模板 | 多语言文档 |
Excel库对比
特性 | PHPExcel | PhpSpreadsheet | 原生CSV |
---|---|---|---|
维护状态 | 已停止 | 活跃 | - |
功能丰富度 | 高 | 更高 | 低 |
内存消耗 | 高 | 优化后较低 | 极低 |
适用场景 | 旧项目维护 | 新项目 | 简单导出 |
四、推荐工具
- PDF云服务:APITemplate.io或CraftMyPDF,适合无需本地部署的场景。
- Excel云服务:结合Zapier等平台实现自动化。
通过合理选择库和优化代码,PHP可高效生成满足需求的PDF和Excel文件。