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();
?>

虽然这不会(注意开头&lt;?标签前的前导空格)

 <?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 注释”选项的情况下保存文件,即在 Adob​​e 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);

当我发出生成报告的请求时,浏览器中显示了一些警告(例如使用了已弃用的函数)。 将offdisplay_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的主要内容,如果未能解决你的问题,请参考以下文章

如何消除 FPDF 中的这个错误?

mPDF 错误:一些数据已经输出到浏览器,无法发送 PDF 文件

mPDF 错误:一些数据已经输出到浏览器

TCPDF ERROR: 一些数据已经输出,不能发送 PDF 文件

使用 FPDF 通过 PHP 发送 PDF 附件

PHP FPDF 无法在 Chrome 中加载 PDF 文档