使用PHP+FPDF从MySQL导出数据生成空PDF问题求助
兄弟,我来帮你捋捋这个FPDF生成空PDF的问题,大概率是这几个环节出了问题,你一步步排查试试:
先确认数据库查询是否真的返回数据
你可以在执行数据库查询后,加一行var_dump($result)或者print_r(mysqli_fetch_all($result)),直接打印查询结果看看有没有拿到数据。要是SQL语句写错(比如表名/字段名拼错、WHERE条件太严格),或者数据库里本来就没对应数据,那PDF自然是空的。检查FPDF的内容添加逻辑是否完整
很多新手会犯的错:实例化FPDF后直接输出,忘了做这两个关键步骤:- 调用
AddPage()添加页面(没页面的话内容没地方放) - 用
Cell()/MultiCell()/Write()这些方法往页面里写内容
给你个极简的正确示例参考:
$pdf = new FPDF(); $pdf->AddPage(); // 必须先加页面! $pdf->SetFont('Arial','B',16); $pdf->Cell(40,10,'测试内容'); // 往页面添加内容 $pdf->Output();要是你漏了这两步,PDF肯定是空的。
- 调用
排查输出前的多余内容
PHP在输出PDF的HTTP头之前,绝对不能有任何额外输出——包括PHP标签外的空格、换行、调试用的echo语句,甚至是文件开头<?php前面的空白。这些看不见的内容会破坏PDF的结构,导致打开后为空。
应急解决可以在$pdf->Output();前加ob_clean();清空输出缓冲区,但最好还是找到多余输出的地方删掉。检查编码与字体适配(如果输出中文)
FPDF默认不支持中文,要是你导出的是中文内容,必须先引入支持中文的字体文件(比如适配GB2312的字体),不然中文会被直接过滤,看起来就是空PDF。如果是英文内容,也要确认SetFont()里的字体名是正确的(比如默认的Arial是可用的,别拼错)。验证PDF输出的HTTP头是否正确
确保在输出PDF前设置了正确的头信息,比如:header('Content-Type: application/pdf'); header('Content-Disposition: attachment; filename="exported_data.pdf"');头信息必须在任何输出(包括FPDF的输出)之前发送,不然可能导致PDF文件渲染异常。
内容的提问来源于stack exchange,提问作者Brix

