Ответ 1
Просто используйте ob_start(); в верхней части страницы.
Я продолжаю получать эту ошибку при попытке добавить свой собственный массив в код. Вот мой массив:
$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 работает отлично, и пример отлично работает, прежде чем добавить код, но когда я запускаю script, я получаю эту ошибку;
Array ( [0] => Test1 [1] => Test2 ) TCPDF ERROR: Some data has already been output, can't send PDF file
И в массиве также содержится более двух элементов. Любые идеи?
Просто используйте ob_start(); в верхней части страницы.
Добавьте функцию ob_end_clean(); перед вызовом функции вывода. Он работал у меня в рамках пользовательской функции Wordpress!
ob_end_clean();
$pdf->Output($pdf_name, 'I');
Добавьте функцию ob_end_clean() перед вызовом функции вывода.
Эта проблема означает, что у вас есть заголовки. Удаляет теги
? >
в конце вашего кода и не забудьте пропустить пробел в начале.
Я просто хочу добавить, что я получал эту ошибку, и ничего не исправит, пока не изменю параметр назначения Output
от F
до FI
.
Другими словами, я должен выводить как файл, так и встроенный.
Output('doc.pdf', 'I')
к
Output('doc.pdf', 'FI')
Я понятия не имею, почему это имело значение, но оно исправило ошибку для меня...
Файл tcpdf, который вызывает "данные уже были выведены", находится в папке tcpdf с именем tcpdf.php. Вы можете изменить его:
добавьте строку 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.
использовать ob_end_clean();
$pdf-> Вывод ($ file, 'I'); открыть pdf. Меня устраивает
для моего случая. Метод Footer имел неверный код html (отсутствует td), вызывающий ошибку при osx.
public function Footer() {
$this->SetY(-40);
$html = <<<EOD
<table>
<tr>
Test Data
</tr>
</table>
EOD;
$this->writeHTML($html);
}
У меня было это, но в отличие от OP я не мог видеть какой-либо вывод перед сообщением об ошибке TCPDF.
Оказывается, в начале моего script перед тегом <? php была указана спецификация UTF8 (байтовый порядок), прежде чем я имел возможность вызвать ob_start(). Кроме того, перед сообщением об ошибке TCPDF была также спецификация UTF8.
Эта проблема возникает, когда apache/php
показывает ошибки.
Эти данные (html
) уничтожают вывод в формате pdf.
Вы должны отключить отображение ошибок в php.ini.
У меня была эта странная ошибка и виновник - это пробел в начале открытого тега PHP
даже без ob_flush
и ob_end_clean
Просто убедитесь, что нет дополнительных white spaces
в блоке <?php ?>
или после него
Для тех, кто все еще сталкивается с этой проблемой, попробуйте добавить:
libxml_use_internal_errors(true);
перед вызовом loadHtml
и добавить
libxml_use_internal_errors(false);
после звонка.
Это решило это для меня.
Используйте ob_start(); в начале вашего кода.
У меня была та же ошибка, но в конце концов я решил ее, подавив ошибки 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