FPDF 错误:一些数据已经输出,无法发送 PDF
Posted
技术标签:
【中文标题】FPDF 错误:一些数据已经输出,无法发送 PDF【英文标题】:FPDF error: Some data has already been output, can't send PDF 【发布时间】:2012-03-17 13:20:06 【问题描述】:我正在为我的项目使用fpdf 库,并且我正在使用它来扩展其中一个drupal 模块。这些行
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
给我一个错误:FPDF错误:一些数据已经输出,无法发送PDF
我尝试在 drupal 区域名称 test.php 之外的单独文件中创建它,并且在查看时它有效。这里的任何人都知道为什么这不起作用?或者这里的任何人都可以为我指出一个正确的 pdf 库,我可以在 drupal 中使用它来查看 html 到 PDF 格式。
【问题讨论】:
【参考方案1】:为了让 fpdf 正常工作,除了 fpdf 生成的内容之外根本不能有 任何 输出。例如,这将起作用:
<?php
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>
虽然这不会(注意开头<?
标签前的前导空格)
<?php
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>
另外,这也不起作用(echo
会破坏它):
<?php
echo "About to create pdf";
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>
我不确定 drupal 方面,但我知道非 fpdf 输出绝对为零是 fpdf 工作的要求。
【讨论】:
好的,因为我刚刚在 .tpl 文件中插入了代码。它具有使用 echo/print 或 html 标记和 javascript 语法的代码块。 顺便说一句 - 我不在 php 中使用短标签。用过这个 是的。那是你的问题。使用echo
也会破坏 fpdf(我将编辑我的答案以显示这一点)。短标签与长标签应该没有区别,但您必须确保您的 php 标签之外甚至没有单个字符。
@GordonBailey 在 PHP MVC 框架中使用 fpdf 的方法是什么,例如在 phalconphp 中,但非常欢迎 MVC 的概念性答案
删除每个 PHP 文件末尾的关闭 "?>",尤其是任何可能“包含”在代码中的 PHP 文件。 “?>”的存在意味着之后可能会有一个“\r\n” EOL,具体取决于您的编辑器,并且“\r\n”将在输出响应中发送并污染您的 PDF。跨度>
【参考方案2】:
您好,您的页面顶部有会话标题吗? 或任何包括 如果您尝试在页面顶部添加此代码,它应该可以正常工作。
<?
while (ob_get_level())
ob_end_clean();
header("Content-Encoding: None", true);
?>
干杯:-)
【讨论】:
【参考方案3】:FPDF 错误消息会将您指向正在发送某些内容的 PHP 行。
如果你没有得到提示是什么 File & Line 发送一些内容,你的 include / require 文件中可能存在编码不匹配。
对我来说
fpdf.php
是 ANSI 编码的,
我的 pdf-generator.php
是 UTF-8 编码的并且
我的 database-connect-inlude 是 UTF-8 编码的(这个 UTF-8 编码确实引发了 FPDF 错误。我不得不将它切换回 ANSI)
【讨论】:
【参考方案4】:尝试在不使用“BOM 注释”选项的情况下保存文件,即在 Adobe Dreamweaver 中,将文件另存为...,取消选中文件名下方显示“包括 Unicode 签名(BOM)”。
在 Notepad++ 上,您应该选择菜单:Encoding, "Encode in UTF-8 without BOM"。
并将它设置为您创建的其他文件的默认设置,它将为您省去很多麻烦。
【讨论】:
【参考方案5】:给我一个错误如下:FPDF error: Some data has already been output, can't send PDF
克服这个错误:
转到fpdf.php
,转到第996行
function Output($name='', $dest='')
之后进行如下更改:
function Output($name='', $dest='')
ob_clean(); //Output PDF to so
【讨论】:
我检查了这个答案,因为它有效,特别是在 标签之外有空格或换行符并且无法全部找到它们的情况下。从调用函数调用“ob_clean”可能比在“输出”函数内部更安全。请注意,它还将隐藏任何可能实际导致问题的合法错误消息。如果你修复了错误,无论如何你都应该这样做,那可能会解决你的问题,而无需求助于这样的“黑客”。 我用过,但它显示了我 - 注意:ob_clean():删除缓冲区失败。在第 981 行的 /var/www/html/-------/fpdf.php 中没有要删除的缓冲区 这对我来说非常完美。从我这边投票。 在将文件移动到新服务器后,我发现了 OP 指出的错误。没有变化,只是从 Windows Server 2012 更新到 2016。添加 ob_clean();解决了问题。 对我来说完美无缺。我在尝试比较两个字符串时遇到了这个问题。【参考方案6】:在我的情况下,我已经设置:
ini_set('display_errors', 'on');
error_reporting(E_ALL | E_STRICT);
当我发出生成报告的请求时,浏览器中显示了一些警告(例如使用了已弃用的函数)。
将off
转display_errors
选项,报告生成成功。
【讨论】:
【参考方案7】:你需要调用库
需要('fpdf.php');
<?php
require('fpdf.php');
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'¡Hola, Mundo!');
$pdf->Output();
?>
http://www.fpdf.org/
http://www.fpdf.org/es/tutorial/tuto1.htm
【讨论】:
【参考方案8】:在顶部添加ob_start ();
,在末尾添加ob_end_flush();
<?php
ob_start();
require('fpdf.php');
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
ob_end_flush();
?>
【讨论】:
这是解决我的问题的好方法 这是解决FPDF error: Some data has been output, can't send PDF.【参考方案9】:第一步 检查文件夹的权限 第二步 放这个
ob_start();
行前
$pdf->Output();
【讨论】:
【参考方案10】:如果您在 PDF 生成之前输出代码通知/警告,请尝试将其关闭。 error_reporting(0)
。然后处理之后的警告
【讨论】:
这应该作为评论发布。【参考方案11】:我使用了以下内容,它对我有用
require_once ('pdf/fpdf.php');
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output(F,'/var/www/html/PATH/filename.pdf');
ob_end_flush();
【讨论】:
【参考方案12】:添加到脚本的开头
ob_start();
require ('fpdf.php');
最后,在output()
之后
ob_end_flush();
它对我有用! =)
【讨论】:
今天显示此错误。它从过去 3 年开始工作,今天不工作 这成功了,但请确保您没有 div 或其他 html 内容(甚至是空格),否则会静默失败。【参考方案13】:致命错误:未捕获的异常“异常”,带有消息“FPDF 错误:一些数据已经输出,无法发送 PDF 文件(输出开始于 /home/asri123/public_html/bill/invoice/invoice.php:743 )' 在 /home/asri123/public_html/bill/invoice/fpdf.php:271 堆栈跟踪:#0 /home/asri123/public_html/bill/invoice/fpdf.php(1052): FPDF->Error('一些数据有...') #1 /home/asri123/public_html/bill/invoice/fpdf.php(1012): FPDF->_checkoutput() #2 /home/asri123/public_html/bill/invoice/mirasbill.php( 262): FPDF->Output('MSFS/2018-19/76...', 'D') #3 main 在 /home/asri123/public_html/bill/invoice/fpdf.php 第 271 行抛出
【讨论】:
它从过去 3 年开始工作,但今天它在所有网站上都停止了,请帮助我【参考方案14】:即使包含的 php 文件中的一个空格也会导致该警告。无论如何都不应该有任何输出。
【讨论】:
【参考方案15】:另一个没有其他人在这里发布的答案... 仔细检查您的 PHP 文件的编码,并确保它不是 UTF-8 以外的东西。错误的代码编辑器(或 FTP 上传?)可能会弄乱文件的编码,在这种情况下,此线程中提到的其他修复都无济于事。
【讨论】:
以上是关于FPDF 错误:一些数据已经输出,无法发送 PDF的主要内容,如果未能解决你的问题,请参考以下文章
mPDF 错误:一些数据已经输出到浏览器,无法发送 PDF 文件