Удаленное изображение Dompdf не отображается в формате pdf

на моем сервере pdf, сгенерированный через dompdf, не отображал изображения. Потому что это удаленные url-изображения.(локальные изображения работают нормально) затем я узнал, что ему нужны некоторые настройки для рендеринга удаленных изображений.

allow_url_fopen = true => i can not as server control is not in my hand.(and no one will suggest to do this due to security reasons)
read/write access to the DOMPDF_TEMP_DIR (already have this)
DOMPDF_ENABLE_REMOTE = true (already have this)

поэтому, чтобы убедиться в проблеме allow_url_fopen, я установил false в моем localhost, который теперь дает тот же результат, что и сервер.

Итак, теперь проблема в том, что теперь я хочу отображать удаленные изображения в PDF с allow_url_fopen = ложные

  • я пробовал почти 5-10 уникальных способов сделать это.
  • я попытался отобразить изображение в php-файле (через заголовки настроек) , а затем отображение ссылки php в pdf
  • я попытался отобразить изображение через абсолютный путь к php, но ничего работал.
  • я попытался получить изображение через curl в функции, а затем отобразить это в файле php ...но безуспешно.

есть ли кто-нибудь может предложить мне, как я могу отобразить изображение в pdf пожалуйста. Ошибка, которую я всегда получаю, есть ...

Image not found
http://localhost/dompdf/image.php

и

Image not found
http://localhost/dompdf/image.jpg

9 ответов


у меня была такая же проблема, изображение dompdf не найдено на live server

Я нашел его решение, вам просто нужно дважды проверить путь изображения,

учитывая ваш путь изображения live server

<img src="http://www.example.com/public/images/thumb.png">

вам просто нужно изменить его,

<img src="public/images/thumb.png">

Примечание: убедитесь, что все параметры такие же, как вы уже сделали.

Я надеюсь, что это поможет вам.


попробовать

$options = new Options();
$options->set('isRemoteEnabled', true);
$dompdf = new Dompdf($options);

есть две вещи, чтобы заботиться.

  1. Если вы используете изображение с того же сервера, используйте полный путь к каталогу, например /var/www/html/project_folder/images/logo.jpg

  2. использование элемента списка JPEG изображения вместо png или других типов.


можете ли вы получить эти URL-адреса в своем веб-браузере на машине, которую вы используете для открытия PDF? Если нет, программа чтения PDF также не сможет этого сделать.

Я подозреваю, что домен "localhost" означает, что эти URL-адреса видны только с веб-сервера, который создал PDF. Вам нужно вывести url-адрес, напримерhttp://example.com/dompdf/image.jpg

(чтобы обойти эту проблему, имейте в виду, что есть веские причины не использовать удаленных изображений. Документ будет плохо выглядеть, если зритель не подключен к интернету, например. Можно ли просто встроить изображения непосредственно в документ?)


dompdf в настоящее время не имеет механизма для различения локального и удаленного домена, поэтому любой URL, который запускает http://... рассматривается как удаленный. Кроме того, любое изображение, которое использует посредника на основе PHP (например, pic.php) не может использовать локальный путь, потому что PHP не будет проанализирован, если вы не пройдете через веб-сервер.

Это сложная перспектива, но ваши страницы генерируются динамически. Поэтому я вижу два варианта:

  1. загрузка удаленных изображений и ссылок на их в локальной файловой системе
  2. загрузка удаленных изображений и использование URI данных.

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


Я думаю, вы могли бы добавить это

private function change_url_image($data, $url) {    
    $str = $url; //for example "http://localhost/yoursite/";
    $str2 = str_replace($str, "", $data);
    return $str2;
}

чтобы изменить url для изображения


та же проблема, с которой я столкнулся, когда я также установил "DOMPDF_ENABLE_REMOTE=>true" в "dompdf/dompdf_config.inc", но не сработало.

одна вещь сработала для меня изменить src для изображений / css от абсолютного к относительному и все сделано.в этом случае у меня есть все css/изображения на моем сервере.


на всякий случай, если у кого-то есть те же проблемы, что и у меня:

  • Я изменил src="https:/ / "to src="адресу http:// " и изображения загружены нормально.

  • Я также добавил все CSS inline в <style> вместо загрузки через <link>

  • и убедитесь, что CSS <style> находится в <head> не <body>


перейдите к dompdf_config.Инк.php-файл и установите переменную DOMPDF_ENABLE_REMOTE в TRUE ...