web-dev-qa-db-fra.com

L'image distante de Dompdf ne s'affiche pas en pdf

Sur mon serveur, le pdf généré via dompdf n’affichait pas les images. Parce qu’il s’agit d’images url distantes (les images locales fonctionnent bien) , Alors je sais qu’il faut quelques paramètres pour restituer les images distantes. .

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)

Donc, pour être certain du problème de allow_url_fopen, j’ai mis la valeur false dans mon hôte local qui donne maintenant le même résultat que serveur.

Le problème est maintenant que je souhaite afficher des images distantes dans PDF avec allow_url_fopen = false

  • J'ai essayé près de 5 à 10 façons uniques de le faire.
  • J'ai essayé d'afficher l'image dans un fichier php (via les en-têtes de paramètres) puis Affichant le lien php en pdf
  • J'ai essayé d'afficher l'image via le chemin absolu vers php aussi mais rien N'a fonctionné.
  • J'ai essayé d'obtenir une image via curl dans une fonction puis de l'afficher dans un fichier php ... mais pas de chance.

Quelqu'un peut-il me suggérer comment afficher une image au format pdf, s'il vous plaît? L'erreur que j'obtiens toujours est ...

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

et

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

J'ai eu le même problème, image dompdf introuvable sur le serveur actif

J'ai trouvé sa solution, il vous suffit de vérifier le chemin de l'image, 

Considérant le chemin de votre image de serveur live

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

Vous devez juste le changer en, 

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

Remarque: assurez-vous que tous les paramètres sont identiques à ceux que vous avez déjà définis.

J'espère que cela t'aidera.

27
Irfan Ahmed

Essayer

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

Il y a deux choses à prendre en compte.

  1. Si vous utilisez une image provenant du même serveur, utilisez le chemin de répertoire complet, par exemple /var/www/html/project_folder/images/logo.jpg

  2. Élément de liste Utilisez JPEG image au lieu de png ou d'autres types.

6
daudichya

Même problème que je rencontrais alors que j'étais également définir le "DOMPDF_ENABLE_REMOTE => true" dans "dompdf/dompdf_config.inc" mais pas travaillé.

Une chose a fonctionné pour moi Changer le src pour images/css de absolu à relatif et les choses faites. Dans ce cas, j'ai tous les css/images sur mon serveur.

0
Mohammad Zeshan

Juste au cas où quelqu'un aurait les mêmes problèmes que moi: 

  • J'ai changé src = " https : //" en src = " http : //" et les images chargées très bien.

  • J'ai également ajouté tous les CSS en ligne dans un <style> au lieu de charger via <link>

  • et assurez-vous que le CSS <style> est dans le <head> et non le <body>

0
vendo

Pouvez-vous atteindre ces URL dans votre navigateur Web sur la machine que vous utilisez pour ouvrir le fichier PDF? Sinon, le lecteur PDF ne le pourra pas non plus.

Je soupçonne que le domaine "localhost" signifie que ces URL ne sont visibles que depuis le serveur Web qui a généré le PDF. Vous devez générer une URL du type http://example.com/dompdf/image.jpg

(Pour éviter ce problème, gardez à l'esprit qu'il existe de bonnes raisons de ne pas utiliser d'images distantes. Le document aura une mauvaise image si le lecteur n'est pas connecté à Internet, par exemple. document?)

0
Stephen Schwink

À l'heure actuelle, dompdf ne dispose pas d'un mécanisme permettant de distinguer les domaines local et distant. Par conséquent, toute URL commençant par http: // ... est traitée comme distante. De plus, toute image utilisant un intermédiaire basé sur PHP (comme pic.php) ne peut pas utiliser un chemin d'accès local car le fichier PHP ne sera pas analysé à moins que vous n'utilisiez un serveur Web.

C'est une perspective difficile, mais vos pages sont générées dynamiquement. Je vois donc deux options:

  1. télécharger des images distantes et les lier sur le système de fichiers local
  2. télécharger des images distantes et utiliser un URI de données.

Puisque vous avez déjà travaillé à obtenir l’image en utilisant curl, vous devriez pouvoir implémenter l’un ou l’autre.

0
BrianS

Je pense que vous pourriez ajouter ceci

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

changer d'url pour l'image

0
user2649610