Ошибка FPDF: некоторые данные уже выведены, не удается отправить PDF - PullRequest
25 голосов
/ 28 февраля 2012

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

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

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

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

Ответы [ 11 ]

41 голосов
/ 28 февраля 2012

Для правильной работы 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();
?>

Я не уверен насчет дружественной стороны вещей, но я знаю, что для работы fpdf требуется абсолютно нулевой вывод без использования fpdf.

19 голосов
/ 18 июня 2015

добавить 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(); 
?>
18 голосов
/ 19 октября 2012

выдайте мне ошибку, как показано ниже:
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
4 голосов
/ 03 октября 2012

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

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

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

2 голосов
/ 02 февраля 2015

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

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

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

2 голосов
/ 10 сентября 2012

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

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

Для меня

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

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

<?

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

?>

ура: -)

1 голос
/ 04 августа 2017

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

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();
1 голос
/ 18 апреля 2016

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

1 голос
/ 08 марта 2016

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

ob_start(); 

перед строкой

$pdf->Output();
...