尝试将自己的数组添加到代码中时,我一直收到此错误。 这是我的阵列;
$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
数组中还有两个以上的项目。有什么想法吗?
答案 0 :(得分:30)
只需使用ob_start();在页面顶部。
答案 1 :(得分:22)
添加函数ob_end_clean();在调用输出功能之前。 它在自定义Wordpress功能中为我工作!
ob_end_clean();
$pdf->Output($pdf_name, 'I');
答案 2 :(得分:9)
在调用Output函数之前添加函数ob_end_clean()。
答案 3 :(得分:5)
此问题意味着您有标题。删除标签
>
在代码的末尾,并确保在开头没有空格。
答案 4 :(得分:5)
我只是想补充一点,我收到了这个错误,在我将Output
目标参数从F
更改为FI
之前,没有任何问题可以解决。
换句话说,我必须输出文件和内联。
Output('doc.pdf', 'I')
到
Output('doc.pdf', 'FI')
我不知道为什么这会产生差异,但它为我修复了错误......
答案 5 :(得分:3)
导致“数据已输出”的tcpdf文件位于名为tcpdf.php的tcpdf文件夹中。你可以修改它:
添加 ob_end_clean(); 一行,如下所示(第3行最后一行):
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访问数据库。
答案 6 :(得分:2)
使用 ob_end_clean();
$ pdf->输出($ file,' I'); 打开pdf。 它对我有用
答案 7 :(得分:1)
对于我的案例,Footer方法的格式错误的html代码(缺少td)导致osx出错。
public function Footer() {
$this->SetY(-40);
$html = <<<EOD
<table>
<tr>
Test Data
</tr>
</table>
EOD;
$this->writeHTML($html);
}
答案 8 :(得分:1)
我有这个,但与OP不同,我在TCPDF错误消息之前看不到任何输出。
事实证明,在我的脚本开始时,在&lt;?php标记之前有一个UTF8 BOM(字节顺序标记),所以在我有机会调用ob_start()之前。在TCPDF错误消息之前还有一个UTF8 BOM。
答案 9 :(得分:1)
此问题是apache/php
显示错误时。
此数据(html
)销毁pdf输出。
您必须在 php.ini 中关闭显示错误。
答案 10 :(得分:1)
我有这个奇怪的错误 而罪魁祸首是PHP开放标签开头的空白区域
即使没有ob_flush
和ob_end_clean
确保在white spaces
阻止
<?php ?>
答案 11 :(得分:1)
对于仍面临此问题的用户,请尝试添加:
libxml_use_internal_errors(true);
在loadHtml
调用之前并添加
libxml_use_internal_errors(false);
。
这为我解决了。
答案 12 :(得分:1)
使用ob_start();在代码的开头。
答案 13 :(得分:0)
我遇到了同样的错误,但最终我通过抑制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
答案 14 :(得分:0)
“某些数据已经输出,无法发送PDF文件”错误是指PHP的输出缓冲区。
所以您需要在发送输出之前清除输出缓冲区的所有内容。
ob_end_clean(); // Clean any content of the output buffer
然后
$pdf->Output('example_001.pdf', 'I'); // Send the PDF !