php代码示例怎么生成pdf文件_php生成pdf文件代码示例【示例】
发布时间 - 2026-01-31 00:00:00 点击率:次最稳当的PHP PDF生成库是tcpdf,它纯PHP实现、中文兼容好、无需系统命令,适合报表等结构化内容;需显式设置中文字体、避免输出干扰header、用ob_end_clean()清理缓冲。
用 tcpdf 生成 PDF 最稳当
PHP 原生不支持 PDF 生成,得靠第三方库。目前最成熟、中文兼容好、不用依赖系统命令的,就是 tcpdf。它纯 PHP 实现,file_get_contents 或 curl 拉来的 HTML 也能转 PDF,适合生成报表、合同、票据这类结构化内容。
安装方式(推荐 Composer):composer require tecnickcom/tcpdf
关键点:
-
TCPDF默认使用ISO-编码,直接输出中文会乱码,必须显式设置中文字体(如
8859-1
dejavusans或自定义simhei.php字体) - 不要用
echo或任何输出干扰 header,否则 PDF 文件头损坏,浏览器提示“文件已损坏” - 生成后建议用
ob_end_clean()清空输出缓冲,避免空白字符混入二进制流
mpdf 对 HTML/CSS 支持更友好
如果你要渲染带样式、浮动、Flex 布局的 HTML 页面为 PDF,mpdf 比 tcpdf 更省心。它对 @media print、font-face、甚至部分 CSS Grid 都有基础支持。
安装:composer require mpdf/mpdf
常见踩坑:
- 默认不加载远程图片,需开启
setHttpHeader(true)并确保allow_url_fopen = On,或改用本地路径 +base_path - 中文仍需注册字体:
$mpdf->SetFont('simhei', '', 12),字体文件(.ttf)要放在ttfonts/目录下并配置好路径 - 调用
Output()前不能有任何var_dump、print_r或未捕获的 warning,否则 PDF 解析失败
用 dompdf 快速原型但别上生产
dompdf 上手最快,require 后几行就能出 PDF,适合临时导出、内部工具。但它内存占用高、CSS 兼容弱,复杂表格或长页面容易超时或崩溃。
最小可用示例:
require_once 'vendor/autoload.php';
use Dompdf\Dompdf;
$dompdf = new Dompdf();
$dompdf->loadHtml('测试
');
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$dompdf->stream('test.pdf');
注意:
- 不支持
position: fixed和大部分伪类(:hover,::before) - 字体嵌入不稳定,中文建议用
mbstring扩展 +set_option('default_font', 'sans') - 大文件生成慎用,
memory_limit至少设为 256M
生成 PDF 后怎么安全响应给浏览器
不是所有 Output() 调用都等价。用户下载失败,十次有八次是 header 写错了。
正确姿势(以 mpdf 为例):
- 必须在
Output()前调用header('Content-Type: application/pdf') - 文件名含中文要用
rawurlencode()编码:header('Content-Disposition: inline; filename="'.rawurlencode('订单_2025.pdf').'";') - 禁用缓存:
header('Cache-Control: no-cache, must-revalidate') - 如果走 AJAX 请求,前端要用
responseType: 'blob'接收,再用URL.createObjectURL()触发下载
最容易被忽略的是:PDF 生成过程中的警告(比如字体缺失、GD 扩展未启用)会混入二进制流,导致文件头污染。上线前务必关闭 display_errors,并用 error_log() 记录异常。
# php
# css
# html
# 前端
# ajax
# composer
# 编码
# 浏览器
# app
# 工具
# curl
# ai
# pdf
# echo
# print
# require
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
,怎么在广州志愿者网站注册?
北京网站制作公司哪家好一点,北京租房网站有哪些?
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Laravel如何使用Vite进行前端资源打包?(配置示例)
如何在腾讯云服务器快速搭建个人网站?
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
PHP 500报错的快速解决方法
高性能网站服务器配置指南:安全稳定与高效建站核心方案
Java遍历集合的三种方式
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Laravel怎么调用外部API_Laravel Http Client客户端使用
手机软键盘弹出时影响布局的解决方法
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
LinuxCD持续部署教程_自动发布与回滚机制
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
Laravel如何处理表单验证?(Requests代码示例)
WordPress 子目录安装中正确处理脚本路径的完整指南
如何在阿里云服务器自主搭建网站?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
如何用PHP快速搭建高效网站?分步指南
中山网站推广排名,中山信息港登录入口?
如何用虚拟主机快速搭建网站?详细步骤解析
什么是javascript作用域_全局和局部作用域有什么区别?
太平洋网站制作公司,网络用语太平洋是什么意思?
大同网页,大同瑞慈医院官网?
使用豆包 AI 辅助进行简单网页 HTML 结构设计
如何快速搭建FTP站点实现文件共享?
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
Android使用GridView实现日历的简单功能
如何选择可靠的免备案建站服务器?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
原生JS获取元素集合的子元素宽度实例
如何挑选优质建站一级代理提升网站排名?
如何快速上传自定义模板至建站之星?
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
个人网站制作流程图片大全,个人网站如何注销?
Android自定义listview布局实现上拉加载下拉刷新功能
做企业网站制作流程,企业网站制作基本流程有哪些?
如何快速搭建支持数据库操作的智能建站平台?
SQL查询语句优化的实用方法总结
C语言设计一个闪闪的圣诞树
Laravel如何与Pusher实现实时通信?(WebSocket示例)
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载


