27

尝试将自己的数组添加到代码中时,我不断收到此错误。这是我的数组;

$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

并且数组中也有超过 2 项。有任何想法吗?

4

15 回答 15

41

添加函数 ob_end_clean(); 在调用输出函数之前。它在自定义 Wordpress 功能中对我有用!

ob_end_clean();
$pdf->Output($pdf_name, 'I');
于 2016-03-11T23:06:41.073 回答
40

只需使用 ob_start(); 在页面顶部。

于 2014-01-15T06:10:38.257 回答
9

在调用输出函数之前添加函数 ob_end_clean()。

于 2014-06-17T02:06:27.320 回答
8

我只想补充一点,我收到了这个错误,在我将Output目标参数从F更改为 之前,没有任何办法可以解决它FI。换句话说,我必须同时输出到文件和内联。

Output('doc.pdf', 'I')

Output('doc.pdf', 'FI')

我不知道为什么这会有所不同,但它为我解决了错误......

于 2015-06-25T03:48:57.707 回答
6

这个问题意味着你有标题。删除标签

?>

在代码的末尾,并确保开头没有空格。

于 2013-12-03T20:32:19.340 回答
4

导致“数据已输出”的 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 访问数据库。

于 2014-04-24T06:44:30.680 回答
4

使用 ob_start(); 在代码的开头。

于 2018-12-20T19:56:06.607 回答
2

我有这个,但与 OP 不同,我在 TCPDF 错误消息之前看不到任何输出。

原来在我的脚本的最开始有一个 UTF8 BOM(字节顺序标记),在 <?php 标记之前,所以在我有机会调用 ob_start() 之前。并且在 TCPDF 错误消息之前还有一个 UTF8 BOM。

于 2017-08-01T10:36:22.877 回答
2

我遇到了这个奇怪的错误,罪魁祸首是 PHP 打开标记开头的空格

即使没有ob_flushandob_end_clean

只要确保在任何块white spaces上或之后没有多余的<?php ?>

于 2017-11-29T06:27:06.377 回答
2

就我而言,页脚方法的 html 代码格式错误(缺少 td)导致 osx 出错。

public function Footer() {
$this->SetY(-40);
$html = <<<EOD
<table>
<tr>
 Test Data
</tr>
</table>
EOD;
$this->writeHTML($html);
}
于 2015-12-08T13:45:29.450 回答
2

使用 ob_end_clean();

$pdf->输出($file, 'I'); 打开pdf。这个对我有用

于 2016-06-23T10:23:09.910 回答
2

“一些数据已经输出,无法发送PDF文件”的错误是指PHP的输出缓冲区。

所以你需要在发送输出之前清理输出缓冲区的任何内容。

ob_end_clean(); // Clean any content of the output buffer

然后

$pdf->Output('example_001.pdf', 'I'); // Send the PDF !
于 2020-03-04T07:13:54.640 回答
1

这个问题是在apache/php显示错误时出现的。

此 data( html) 破坏 pdf 输出。

您必须关闭php.ini中的显示错误。

于 2017-10-09T10:49:33.300 回答
1

我有同样的错误,但最后我通过抑制 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
于 2018-11-14T01:01:45.557 回答
1

对于那些仍然面临这个问题的人,请尝试添加:

libxml_use_internal_errors(true);

loadHtml通话之前添加

libxml_use_internal_errors(false);

通话后。

这为我解决了。

于 2018-09-26T13:21:25.663 回答