Как устранить ошибку TCPDF: некоторые данные уже выведены, не могу отправить файл PDF

Борьба с широко известной фатальной ошибкой TCPDF? Ошибка «Некоторые данные уже выведены, не удается отправить файл PDF» относится к выходному буферу PHP. Как вы, возможно, знаете, как разработчик PHP, есть код, который генерирует вывод в PHP, и код, который, например, не представляет метод, а именно getId который возвращает число:

getId();
// [no output]
echo getId();
// Output: 1

Итак, конфликт с TCPDF заключается в том, что сама библиотека, когда вы пытаетесь сгенерировать PDF и выбросить его в браузер, используя следующий код:

Output('example_006.pdf', 'I');

В вашем коде наверняка есть что-то, что отправляет некоторый текст или данные в выходной буфер PHP перед PDF, и поэтому создается исключение, это автоматически делается библиотекой, чтобы предотвратить повреждение созданного PDF.

Пример ошибки

Чтобы вызвать нашу ошибку в некотором коде с TCPDF, используя print_r или же var_dump к некоторому значению вызовет ошибку. Это также случается, если вы используете echo или если PHP выдает предупреждение, уведомление об устаревании или другие виды ошибок:

SetFont("helvetica", '', 10);
$pdf->AddPage();
// Important: this will prevent the generation of the PDF in the browser
// as we are filling the output buffer of PHP
var_dump(array(
"test" => "demo"
));
// create some HTML content
$html = 'HTML Example

List

List example:
  1. bold text
  2. italic text
  3. underlined text
  4. bbibiubib
  5. link to http://www.tecnick.com
  6. Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.
  7. SUBLIST
    1. row one
      • sublist
    2. row two
  8. TEST line through
  9. font + 3
  10. small text normal small text normal subscript normal superscript normal
'; // Output the HTML content $pdf->writeHTML($html, true, false, true, false, ''); $pdf->lastPage(); $pdf->Output('example_006.pdf', 'I');

Выполнение предыдущего кода будет генерировать следующий вывод в браузере:

array(1) { ["test"]=> string(4) "demo" } TCPDF ERROR: Some data has already been output, can't send PDF file

Решение

Первое и наиболее распространенное решение — это поиск в вашем коде строки или кода, генерирующих какой-либо вывод перед TCPDF, и удаление его (упомянутые методы как print_r, var_dump, echo и т. Д.). Если нет никакого метода, который генерирует выходные данные, кроме предупреждений, уведомлений об устаревании или ошибок от PHP, вам нужно сначала решить их. После этого PDF должен быть создан без каких-либо проблем.

Если по какой-то причине вы не можете отследить, откуда генерируется вывод, то вы можете использовать очень простой прием (хотя и очень хитрый), который очищает буфер вывода PHP перед генерацией PDF с помощью метода Output из TCPDF:

// Clean any content of the output buffer
ob_end_clean();
// Send the PDF !
$pdf->Output('example_006.pdf', 'I');

Это немедленно сработает, однако это проблема, если вы хотите отладить содержимое переменных в браузере с помощью упомянутых методов, которые генерируют содержимое в выводе. Например, если вы очищаете выходной буфер, но хотите видеть содержимое переменной с помощью следующего кода:

// Debug the content of some variable
var_dump(array(
"data" => "demo"
));
// Clean any content of the output buffer
ob_end_clean();
// Send the PDF !
$pdf->Output('example_006.pdf', 'I');

Вы никогда не увидите результат var_dump как мы чистим буфер после. Таким образом, наилучшее решение — найти, откуда выходной буфер заполняется нежелательными данными, и удалить его.

Ссылка на основную публикацию
Adblock
detector