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_flushob_end_clean

只需确保在任何 &lt;?php ?&gt; 块上或之后没有多余的 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 文件的主要内容,如果未能解决你的问题,请参考以下文章

JOOMLA 中的 TCPDF 库!组件以 PDF 格式输出 html

相同代码下,TCPDF 的速度是 FPDF 的两倍

tcpdf - 从现有的 PDF 文档开始

php 使用tcpdf库输出pdf

如何在 TCPDF 中添加自定义字体?

使用 FPDI 加载到 TCPDF 时调整 PDF 大小