Ошибка FPDF: некоторые данные уже были выведены, не удается отправить PDF

Я использую библиотеку fpdf для своего проекта, и я использую ее для расширения одного из модулей drupal. Эти линии

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();

выдает ошибку: Ошибка FPDF: некоторые данные уже выведены, невозможно отправить PDF

Я попытался создать это в отдельном файле вне имени области drupal test.php, и при просмотре это сработало. Кто-нибудь здесь знает, почему это не работает? Или кто-нибудь здесь может указать мне правильную библиотеку PDF, которую я могу использовать в drupal для просмотра HTML в формате PDF.


person Wondering Coder    schedule 28.02.2012    source источник


Ответы (15)


Для правильной работы fpdf не может быть никакого вывода, кроме того, что генерирует fpdf. Например, это будет работать:

<?php
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>

Пока этого не будет (обратите внимание на начальный пробел перед открывающим тегом <?)

 <?php
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>

Кроме того, это тоже не сработает (это echo сломает):

<?php
echo "About to create pdf";
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
?>

Я не уверен насчет drupal, но я знаю, что абсолютно нулевой вывод не-fpdf является требованием для работы fpdf.

person Gordon Bailey    schedule 28.02.2012
comment
оу, хорошо, потому что я только что вставил код в файлы .tpl. Он имеет блоки кодов, которые используют теги echo/print или html и синтаксис javascript. - person Wondering Coder; 28.02.2012
comment
Кстати, я не использую короткие теги в php. использовал этот ‹?php ?› - person Wondering Coder; 28.02.2012
comment
Ага. это твоя проблема. Использование echo также приведет к поломке fpdf (я отредактирую свой ответ, чтобы показать это). Короткие теги и длинные теги не должны иметь значения, но вы должны убедиться, что за пределами ваших php-тегов нет ни одного символа. - person Gordon Bailey; 28.02.2012
comment
@GordonBailey Какой подход можно было бы использовать при использовании fpdf в средах PHP MVC, например, в phalconphp, но концептуальный ответ для MVC очень приветствуется - person eomeroff; 26.11.2013
comment
УДАЛИТЕ закрывающий ?› в конце каждого файла PHP, особенно любого файла PHP, который может быть включен в код. Само существование ?› означает, что впоследствии может быть \r\n EOL, в зависимости от вашего редактора, и что \r\n будет отправлено в выходном ответе и загрязнит ваш PDF-файл. - person UncaAlby; 11.11.2016
comment
Спасибо, @gordeon, у меня та же проблема, что и в mpdf, но локальный хост выдает вывод в формате pdf, а сервер не выдает, тогда я удаляю пробел перед тегом ‹?php, и моя проблема решена. - person Bhavin Thummar; 23.06.2017
comment
echo было проблемой в моем случае! Спасибо - person Zaheer; 01.06.2019

добавьте ob_start (); вверху и в конце добавьте ob_end_flush();

<?php
    ob_start();
    require('fpdf.php');
    $pdf = new FPDF();
    $pdf->AddPage();
    $pdf->SetFont('Arial','B',16);
    $pdf->Cell(40,10,'Hello World!');
    $pdf->Output();
    ob_end_flush(); 
?>
person Behlum Noman    schedule 18.06.2015
comment
Это ответ, который решил мою проблему, отличная работа - person Humphrey; 18.04.2016
comment
Это решение ошибки FPDF error: некоторые данные уже были выведены, не удается отправить PDF. - person Ravi Shrimali; 13.01.2018

дайте мне сообщение об ошибке, как показано ниже:
FPDF error: Some data has already been output, can't send PDF

чтобы преодолеть эту ошибку: перейдите к fpdf.php в этом, перейдите к строке номер 996

function Output($name='', $dest='')

после этого внесите такие изменения:

function Output($name='', $dest='') {   
    ob_clean();     //Output PDF to so
person raghavendra    schedule 19.10.2012
comment
Я проверил этот ответ, потому что он работает, особенно в тех случаях, когда у вас есть пробелы или новые строки за пределами ваших тегов ‹?php ?›, и вы не можете найти их все. Может быть безопаснее вызывать ob_clean из вызывающей функции, а не внутри функции вывода. Имейте в виду, что он также будет скрывать любые законные сообщения об ошибках, которые могут действительно вызывать проблему. Если вы исправите ошибки, что вы должны сделать в любом случае, это может решить вашу проблему, не прибегая к подобным хакам. - person UncaAlby; 26.10.2016
comment
Я использовал это, но это показывает мне - Обратите внимание: ob_clean(): не удалось удалить буфер. Нет буфера для удаления в /var/www/html/-------/fpdf.php в строке 981 - person Kashmiri; 04.08.2017
comment
Это работает идеально для меня. плюс с моей стороны. - person Naren Verma; 06.11.2017
comment
Я обнаружил ошибку, отмеченную OP, после перемещения файлов на новый сервер. Никаких изменений, просто обновление с Windows Server 2012 до 2016. Добавление ob_clean(); решил проблему. - person Burndog; 02.01.2018
comment
Работал безупречно для меня. У меня возникла эта проблема при попытке сравнить две строки. - person Keno Clayton; 07.05.2018
comment
Я использую эту библиотеку: github.com/myokyawhtun/PDFMerger, и это сработало для меня. Вместо этого я изменил /tcpdf/tcpdf.php - person mike; 26.03.2019

Попробуйте сохранить файл без параметра: «Комментарий к спецификации», т. е. в Adobe Dreamweaver вы Сохранить файл как..., снимите флажок под именем файла, который гласит: «Включить подпись Unicode». (спецификация)".

В Notepad++ вы должны выбрать меню: Кодировка, "Кодировать в UTF-8 без спецификации".

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

person Andrey Aires    schedule 03.10.2012

Привет, у вас есть заголовок сеанса в верхней части вашей страницы. или любые другие. Если вы попытаетесь добавить эти коды вверху страницы, все должно работать нормально.

<?

while (ob_get_level())
ob_end_clean();
header("Content-Encoding: None", true);

?>

ваше здоровье :-)

person Cino Jose    schedule 05.06.2012

В моем случае я установил:

ini_set('display_errors', 'on');
error_reporting(E_ALL | E_STRICT);

Когда я сделал запрос на создание отчета, в браузере отображались некоторые предупреждения (например, об использовании устаревших функций).
При включении off опции display_errors отчет был успешно создан.

person Victor    schedule 02.02.2015

Сообщение об ошибке FPDF укажет вам на строку PHP, которая отправляет некоторый контент.

Если вы не получаете намека на то, что File & Line отправляет некоторый контент, у вас, вероятно, есть несоответствие кодировки в ваших файлах include/require.

Для меня

  • fpdf.php был закодирован в ANSI,
  • мой pdf-generator.php был в кодировке UTF-8 и
  • моя база данных-connect-inlude была в кодировке UTF-8 (эта кодировка UTF-8 вызвала ошибку FPDF. Мне пришлось переключить ее обратно на ANSI)
person HansWurst    schedule 10.09.2012

Первый шаг проверьте разрешения на папки, второй шаг поставьте это

ob_start(); 

перед линией

$pdf->Output();
person Santos L. Victor    schedule 08.03.2016

если ваш код выводит уведомления/предупреждения перед генерацией PDF, попробуйте отключить их. error_reporting(0). Затем поработайте над предупреждениями после этого

person Cliff Ombachi    schedule 18.04.2016
comment
Это должно быть опубликовано как комментарий. - person Marko Popovic; 18.04.2016

Я использовал следующее, и это сработало для меня

require_once ('pdf/fpdf.php');

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output(F,'/var/www/html/PATH/filename.pdf');
ob_end_flush();
person Kashmiri    schedule 04.08.2017

Добавить в начало скрипта

ob_start();
require ('fpdf.php');

и в конце, после output()

ob_end_flush();

Это сработало для меня! знак равно

person JavierMD    schedule 09.12.2019
comment
эта ошибка показывает сегодня. он работает с последних 3 лет и сегодня не работает - person Rajesh; 20.05.2020

Вам нужно позвонить в библиотеку

требуют ('fpdf.php');

<?php
require('fpdf.php');

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'¡Hola, Mundo!');
$pdf->Output();
?>

http://www.fpdf.org/

http://www.fpdf.org/es/tutorial/tuto1.htm

person Proyecto Pi    schedule 11.03.2015

Неустранимая ошибка: необработанное исключение «Исключение» с сообщением «Ошибка FPDF: некоторые данные уже были выведены, невозможно отправить файл PDF (вывод начался в /home/asri123/public_html/bill/invoice/invoice.php:743)» в /home/asri123/public_html/bill/invoice/fpdf.php:271 Трассировка стека: #0 /home/asri123/public_html/bill/invoice/fpdf.php(1052): FPDF->Error('Некоторые данные содержат a. ..') #1 /home/asri123/public_html/bill/invoice/fpdf.php(1012): FPDF->_checkoutput() #2 /home/asri123/public_html/bill/invoice/mirasbill.php(262): FPDF->Output('MSFS/2018-19/76...', 'D') #3 {main} добавлено в /home/asri123/public_html/bill/invoice/fpdf.php в строке 271

person Rajesh    schedule 20.05.2020
comment
он работает с последних 3 лет, но сегодня он остановился на всех сайтах, пожалуйста, помогите мне - person Rajesh; 20.05.2020

Даже один пробел во включенных файлах php вызывает это предупреждение. Никакого вывода быть не должно.

person mguven guven    schedule 02.08.2020

Еще один ответ, который здесь никто не публиковал... Перепроверьте кодировку вашего файла PHP и убедитесь, что это не что-то иное, чем UTF-8. Неправильный редактор кода (или загрузка по FTP?) может испортить кодировку файла, и в этом случае никакие другие исправления, упомянутые в этой теме, не помогут.

person justanotherguy    schedule 05.11.2020