Этот вопрос поднят сто раз на разных форумах; некоторые были решены, некоторые – нет. Я проверил множество ресурсов, но моя проблема не была решена. Я создаю php-страницу, используя шаблон smarty на основе ввода и выгрузки файлов html. Используя dompdf, я хочу сохранить созданную страницу как файл PDF. Когда пользователь отправляет данные multipart / form, данные отправляются самому себе. Затем он проходит процесс проверки. Когда все в порядке, создается новая страница с использованием файла шаблона. Нет вывода, вместо этого dompdf использует файл шаблона для потока файла pdf. После решения нескольких этапов проблем, таких как «DOMPDF not found», недостаточной памяти и т. Д., Я теперь застрял с ошибкой «Невозможно передать поток pdf: заголовки уже отправлены». Одной из наиболее распространенных проблем является наличие разрыва строки, пробела или любого выхода, который вызывается перед вызовом stream (). Я проверил пробел до и после? Также нет ни print_f, ни эхо-заявлений. Как устранить эту проблему? Где проблема лежит … в файле шаблона smarty или самом файле php? Вот код:
require_once("dompdf/dompdf_config.inc.php"); spl_autoload_register('DOMPDF_autoload'); $html = $smarty->fetch('index.tpl'); $dompdf = new DOMPDF(); $dompdf->load_html($html); $dompdf->set_paper('a4', 'portrait'); $dompdf->render(); $dompdf->stream("newfile.pdf");
простое решение:
напишите ниже строки перед потоком, он покажет, где именно начинается новая линия или пространство
$f; $l; if(headers_sent($f,$l)) { echo $f,'<br/>',$l,'<br/>'; die('now detect line'); }
Скорее всего, в вашем коде есть пробел или новая строка, вызывающая это. Вот простой способ его отладки:
echo "end!";exit;
Другая возможность заключается в том, что вы где-то используете языковую строку, которая вводит непечатаемый символ. Если ваше приложение является многоязычным, убедитесь, что вы тестируете с использованием английского языка
Я попытался откликнуться, но никаких пробелов или разрывов строк не найдено. В конце я перенаправил php на другую страницу вместо PHP_SELF, и проблема исчезла. Я не изменял никакого кода. Похоже, присутствие html-тегов после того, как php закончился, было оскорбительным фактором.
Убедитесь, что ваш редактор не добавляет описание Unicode Bom – сохраните код в файл с помощью Notepad или (если вы работаете в Dreamweaver) удалите проверку подписями Asign Unicode (BOM) или что-то в этом роде. 😉
Замените строку 3105 этого файла: dompdf/lib/class.pdf.php
if ( headers_sent()) { die("Unable to stream pdf: headers already sent"); }
С
$output = ob_get_clean(); if ( headers_sent()) { echo $output; }
Затем в файл, который генерирует вывод в формате pdf, например, если вы выводили из компонентов компонента Joomla / com_joomlacomponent / views / yourpdfdir / tmpl / default.php, введите сразу после открытия php-тега
<?php ob_start();
Я столкнулся с этой проблемой. Вы хотите проверить все переменные, которые используете. Одна или даже более чем одна переменная, которую вы передаете, пустая и беспорядочна.
Начните постепенно, избавившись от всего php
и попытайтесь сгенерировать PDF-файл, а затем, если он работает для вас, добавьте блок по блоку .
Это поможет вам определить, где проблема.
В моем случае проблема была решена путем установки $ _dompdf_show_warnings в false в dompdf_config_inc.php
У меня была эта проблема, без видимых результатов при просмотре источника. Проблема для меня заключалась в том, что я удалил вывод, хотя не было ни одного, кроме заголовков, и блокировал поток, выдавая сообщение «отправленные уже заголовки». Это было правдой. Мое исправление заключалось в том, чтобы удалить операторы flush () и ob_flush (), после чего работал потоковый вывод.
для меня – решение заключалось в том, чтобы кодировать мой файл в UTF-8 вместо спецификации UTF-8