Подтвердить что ты не робот

TCPDF ERROR: некоторые данные уже выведены, не удается отправить файл PDF

Я продолжаю получать эту ошибку при попытке добавить свой собственный массив в код. Вот мой массив:

$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

И в массиве также содержится более двух элементов. Любые идеи?

4b9b3361

Ответ 1

Просто используйте ob_start(); в верхней части страницы.

Ответ 2

Добавьте функцию ob_end_clean(); перед вызовом функции вывода. Он работал у меня в рамках пользовательской функции Wordpress!

ob_end_clean();
$pdf->Output($pdf_name, 'I');

Ответ 3

Добавьте функцию ob_end_clean() перед вызовом функции вывода.

Ответ 4

Эта проблема означает, что у вас есть заголовки. Удаляет теги

? >

в конце вашего кода и не забудьте пропустить пробел в начале.

Ответ 5

Я просто хочу добавить, что я получал эту ошибку, и ничего не исправит, пока не изменю параметр назначения Output от F до FI. Другими словами, я должен выводить как файл, так и встроенный.

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

к

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

Я понятия не имею, почему это имело значение, но оно исправило ошибку для меня...

Ответ 6

Файл 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.

Ответ 7

использовать ob_end_clean();

$pdf-> Вывод ($ file, 'I'); открыть pdf. Меня устраивает

Ответ 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.

Оказывается, в начале моего script перед тегом <? php была указана спецификация UTF8 (байтовый порядок), прежде чем я имел возможность вызвать ob_start(). Кроме того, перед сообщением об ошибке TCPDF была также спецификация UTF8.

Ответ 10

Эта проблема возникает, когда apache/php показывает ошибки.

Эти данные (html) уничтожают вывод в формате pdf.

Вы должны отключить отображение ошибок в php.ini.

Ответ 11

У меня была эта странная ошибка и виновник - это пробел в начале открытого тега PHP

даже без ob_flush и ob_end_clean

Просто убедитесь, что нет дополнительных white spaces в блоке <?php ?> или после него

Ответ 12

Для тех, кто все еще сталкивается с этой проблемой, попробуйте добавить:

libxml_use_internal_errors(true);

перед вызовом loadHtml и добавить

libxml_use_internal_errors(false);

после звонка.

Это решило это для меня.

Ответ 13

Используйте ob_start(); в начале вашего кода.

Ответ 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