dompdf: загрузка HTML-файлов для рендеринга, не работает

dompdf не может создать PDF-файл со страницы моего веб-сайта. Однако я сохранил страницу и загрузил ее как простой статический файл HTML, и это сработало!

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

Предупреждение: require_once (/home/o110334/public_html/dompdf/include/firephp.cls.php) [function.require-once]: не удалось открыть поток: нет такого файла или каталога в / home / o110334 / public_html / dompdf / dompdf_config .inc.php в строке 194

Неустранимая ошибка: require_once () [function.require]: требуется неудачное открытие '/home/o110334/public_html/dompdf/include/firephp.cls.php' (include_path = '.: / Usr / lib / php: / usr / local / lib / php ') в /home/o110334/public_html/dompdf/dompdf_config.inc.php в строке 194

Это код:

$file = "admin/store/orders/45/invoice/print"; // doesn't work
//$file = "invoice_sample2.html"; //it works (same web page, but stored in a html file)

$dompdf = new DOMPDF();
$dompdf->load_html_file($file);
$dompdf->render();
$dompdf->stream("sample.pdf");

person aneuryzm    schedule 14.07.2010    source источник
comment
Вы используете какой-то фреймворк? Я спрашиваю, потому что путь к файлу выглядит как удобный URL, который может использоваться фреймворком. Если это так, то вы хотите использовать метод №1, указанный Wrikken. DOMPDF предполагает путь к локальной файловой системе, если вы не укажете полный URL-адрес (например, example.com / admin / store / orders / 45 / invoice / print). Платформа не будет обрабатывать файл, если вы не пройдете через веб-сервер.   -  person BrianS    schedule 15.07.2010


Ответы (1)


DOMPDF пробует всевозможные вещи / eval при локальном запуске, вам лучше попробовать:

1) (разрешенное, долгое путешествие) запроса HTML по http:

$dompdf->load_html_file('http://yourdomain.ext/'.$file);

2) Не позволяйте DOMPDF eval использовать саму буферизацию вывода и позволять DOMPDF загружать результирующую строку HTML.

<?php
    ob_start();
    //be sure this file exists, and works outside of web context etc.)
    require("admin/store/orders/45/invoice/print");
    $dompdf = new DOMPDF();
    $dompdf->load_html(ob_get_clean());
    $dompdf->render();
?>
person Wrikken    schedule 14.07.2010
comment
Я обновил свой вопрос. Та же самая страница отображается правильно, если загружена из статического файла HTML (даже локально). - person aneuryzm; 14.07.2010
comment
Это то, что я сказал. я сказал НЕ позволяйте DOMPDF запускать ваш php. - person Wrikken; 14.07.2010
comment
Метод №1 закодирован для большей переносимости $ file = / admin / store / orders / 45 / invoice / print; $ dompdf- ›load_html_file ('http: //'.$_SERVER [' HTTP_HOST '] .dirname ($ _SERVER [' PHP_SELF ']). $ file); - person BrianS; 15.07.2010
comment
@BrianS: PHP_SELF не часто бывает по делу, конечно, не с переписыванием URL, стандартным сценарием посадки и т.д. - person Wrikken; 22.06.2014
comment
@Wrikken: да, это зависит от вашей среды. Я бы выбрал что-то более близкое к №2, за исключением того, что я построил бы документ и затем загрузил его в dompdf. Иногда легче пройти через веб-сервер, потому что а) динамический контент будет отображаться сервером и б) ссылки на внешние файлы (например, изображения, css) будут указывать там, где ожидалось. Последняя проблема часто встречается, когда люди пытаются использовать dompdf и локальный файл или load_html (). - person BrianS; 24.06.2014
comment
@Wrikken будет работать с 1-м методом, если мой $file не заканчивается на html ?? потому что у меня аналогичная проблема. Браузер может открывать URL http://localhost:1111/report/get/myfile, но тот же URL не работает с DOMPDF. Это дает файл, который не найден - person mrid; 11.04.2020