TCPDF ERROR: 一些数据已经输出,不能发送 PDF 文件
Posted
技术标签:
【中文标题】TCPDF ERROR: 一些数据已经输出,不能发送 PDF 文件【英文标题】:TCPDF ERROR: Some data has already been output, can't send PDF file 【发布时间】:2013-04-07 07:46:03 【问题描述】:尝试将我自己的数组添加到代码中时,我不断收到此错误消息。 这是我的数组;
$array = array();
while (odbc_fetch_row($rs))
$array[] = odbc_result($rs,'Product Name');
$test = print_r($array);
原始代码在这里。我正在使用示例页面进行尝试,因为我知道示例页面可以正常工作。
http://www.tcpdf.org/examples/example_001.phps
此代码位于 $html 变量之前,设置它时我只需将 $test 变量添加到 $html 变量中。 odbc 连接工作正常,示例在我添加任何代码之前工作正常,但是当我运行脚本时出现此错误;
Array ( [0] => Test1 [1] => Test2 ) TCPDF ERROR: Some data has already been output, can't send PDF file
而且 Array 中也有超过 2 项。有什么想法吗?
【问题讨论】:
在发送标头之前是否有任何输出?它是 UTF-8 文件吗?是没有BOM文件的UTF-8吗? 试过更改$test
和$array
的变量名?
您收到此错误是因为您想在发送 pdf 标头之前打印出一些内容,注释 pdf 部分以进行调试,然后使用它们
如果要返回值print_r
需要第二个参数:$test = print_r($array, true);
嗨@CORRUPT我不确定你对标题的确切含义,不应该有任何输出,因为我已将 $test 变量放入生成 HTML 部分的代码中,我相信它是UTF-8
【参考方案1】:
添加函数 ob_end_clean();在调用输出函数之前。 它在自定义 Wordpress 函数中对我有用!
ob_end_clean();
$pdf->Output($pdf_name, 'I');
【讨论】:
【参考方案2】:只需使用 ob_start();在页面顶部。
【讨论】:
【参考方案3】:在调用输出函数之前添加函数ob_end_clean()。
【讨论】:
【参考方案4】:我只想补充一点,我遇到了这个错误,直到我将 Output
目标参数从 F
更改为 FI
之前,什么都无法解决。
换句话说,我必须同时输出到文件和内联。
Output('doc.pdf', 'I')
到
Output('doc.pdf', 'FI')
我不知道为什么这会有所不同,但它为我解决了错误...
【讨论】:
是的!使用 php7.0.10 和 Html2PDF 4.03【参考方案5】:这个问题意味着你有标题。删除标签
?>
在代码的末尾,并确保开头没有空格。
【讨论】:
表示,内容已经发送。所以标题不能再设置了【参考方案6】:导致“数据已输出”的 tcpdf 文件位于名为 tcpdf.php 的 tcpdf 文件夹中。你可以修改它:
添加 ob_end_clean(); 行如下(倒数第三行):
public function Output($name='doc.pdf', $dest='I')
//LOTS OF CODE HERE....
switch($dest)
case 'I':
// Send PDF to the standard output
if (ob_get_contents())
$this->Error('Some data has already been output, can\'t send PDF file');
//some code here....
case 'D': // download PDF as file
if (ob_get_contents())
$this->Error('Some data has already been output, can\'t send PDF file');
break;
case 'F':
case 'FI':
case 'FD':
// save PDF to a local file
//LOTS OF CODE HERE..... break;
case 'E':
// return PDF as base64 mime email attachment)
case 'S':
// returns PDF as a string
return $this->getBuffer();
default:
$this->Error('Incorrect output destination: '.$dest);
ob_end_clean(); //add this line here
return '';
现在让我们看看您的代码。 我看到您混淆了 $rs 和 $sql 。这是两个不同的东西一起工作。
$conn=odbc_connect('northwind','****','*****');
if (!$conn)
exit("Connection Failed: " . $conn);
$sql="SELECT * FROM products"; //is products your table name?
$rs=odbc_exec($conn,$sql);
if (!$rs)
exit("Error in SQL");
while (odbc_fetch_row($rs))
$prodname=odbc_result($rs,"Product Name"); //but preferably never use spaces for table names.
$prodid=odbc_result($rs,"ProdID"); //prodID is assumed attribute
echo "$prodname";
echo "$prodid";
odbc_close($conn);
now you can use the $prodname and output it to the TCPDF output.
我假设您正在连接到 MS 访问数据库。
【讨论】:
【参考方案7】:使用 ob_start();在代码的开头。
【讨论】:
【参考方案8】:就我而言,Footer 方法的 html 代码格式错误(缺少 td)导致 osx 出错。
public function Footer()
$this->SetY(-40);
$html = <<<EOD
<table>
<tr>
Test Data
</tr>
</table>
EOD;
$this->writeHTML($html);
【讨论】:
【参考方案9】:我有这个,但与 OP 不同,我在 TCPDF 错误消息之前看不到任何输出。
原来在我的脚本的最开始有一个 UTF8 BOM(字节顺序标记),在
【讨论】:
【参考方案10】:我遇到了这个奇怪的错误 罪魁祸首是PHP打开标签开头的空白
即使没有 ob_flush
和 ob_end_clean
只需确保在任何 <?php ?>
块上或之后没有多余的 white spaces
【讨论】:
【参考方案11】:使用 ob_end_clean();
$pdf->输出($file, 'I'); 打开pdf。 它对我有用
【讨论】:
【参考方案12】:“部分数据已输出,无法发送PDF文件”的错误是指PHP的输出缓冲区。
因此您需要在发送输出之前清理输出缓冲区的所有内容。
ob_end_clean(); // Clean any content of the output buffer
然后
$pdf->Output('example_001.pdf', 'I'); // Send the PDF !
【讨论】:
【参考方案13】:apache/php
显示错误时会出现此问题。
此数据(html
) 破坏 pdf 输出。
您必须关闭 php.ini 中的显示错误。
【讨论】:
【参考方案14】:我遇到了同样的错误,但最后我通过抑制 PHP 错误解决了它
只需将此代码error_reporting(0);
放在打印页面的顶部
<?php
error_reporting(0); //hide php errors
if( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once dirname(__FILE__) . '/tohtml/tcpdf/tcpdf.php';
.... //continue
【讨论】:
【参考方案15】:对于那些仍然面临这个问题的人,请尝试添加:
libxml_use_internal_errors(true);
在loadHtml
调用之前添加
libxml_use_internal_errors(false);
通话后。
这为我解决了。
【讨论】:
哪个 loadHtml 调用?以上是关于TCPDF ERROR: 一些数据已经输出,不能发送 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章