PHP生成PDF需依场景选方案:TCPDF纯PHP但CSS支持弱;Dompdf兼容性好但不执行JS;wkhtmltopdf效果最佳但需系统权限。稳定复现需多环境测试。

PHP 本身不内置 PDF 生产能力,必须依赖扩展或第三方库;直接调用 exec() 调用外部工具(如 wkhtmltopdf)虽可行,但存在安全与部署风险,不推荐生产环境盲用。
用 TCPDF 生成基础 PDF(适合纯 PHP、无扩展权限场景)
TCPDF 是纯 PHP 实现的库,无需额外扩展,适合共享主机或无法安装 ext-imagick/ext-gd 的环境。但它对 CSS 支持有限,float、flex、现代字体子集几乎不支持。
- 下载最新版 TCPDF(v6.6+),解压后只保留
tcpdf.php和config/、fonts/目录即可 - 中文需提前复制并注册字体:把
simhei.ttf放进fonts/,再用$pdf->addTTFfont('fonts/simhei.ttf', 'TrueTypeUnicode', '', 32) - 避免用
writeHTML()渲染复杂表格——单元格跨行、边框合并容易错位,改用Cell()或MultiCell()手动布局更稳 - 生成大文件(>10MB)时注意
memory_limit和max_execution_time,TCPDF 内存占用是原始 HTML 的 3–5 倍
用 Dompdf 渲染 HTML 为 PDF(开发体验好,但内存敏感)
Dompdf 对 HTML/CSS 兼容性优于 TCPDF,支持多数 Bootstrap 类和内联样式,适合从已有页面导出 PDF。但它基于 PHP 解析渲染,不是真正浏览器引擎,@media print 不触发,position: fixed 仅在页眉页脚中有效。
- 务必使用 Composer 安装:
composer require dompdf/dompdf,手动引入易漏依赖(如phenx/php-font-lib) - 默认不启用远程图片加载,若 HTML 含
- 超时问题多因 HTML 中含未响应的外部资源(如监控 JS、统计像素),建议导出前先用
file_get_contents()获取 HTML 字符串,剔除<script></script>和非必要
真正难的不是“怎么生成”,而是“怎么让生成的 PDF 在不同环境里稳定复现”——字体嵌入、页面尺寸、分页断点、页眉页脚重叠,这些细节在测试机上没问题,一上生产就偏移两像素。别省那几分钟,每次上线前至少用三台不同系统(Linux/macOS/Windows)跑一遍 PDF 样本比对。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











