web-dev-qa-db-fra.com

Erreur TCPDF: impossible d'obtenir la taille de l'image

J'utilise TCPDF pour créer un fichier pdf généré dynamiquement. Dans mon fichier pdf, une image est générée en fonction de l'entrée utilisateur et je veux ajouter cette image sur mon fichier pdf. Voici mon code

 $map_image = "example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area=";

$pdf->Image ($map_image, 55, 19, '', '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);

Si je colle " example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area=" ceci sur mon url cette image de création comme je le voulais, mais si mettre cette URL, cela ne fonctionne pas. Il dit Impossible d'obtenir la taille de l'image

Mais si je mets quelque chose comme ça

$map_image = '/wp-content/themes/v3/resources/images/public/logo_side.jpg';

Il peut générer un pdf avec cette image avec succès.

Comment puis-je le résoudre ?

J'ai visité le lien stackoverflow suivant, mais rien de tout cela n'a été utile

tcpdf travaillant sur localhost mais pas sur mon serveur donnant l'erreur TCPDF ERREUR: [Image] Impossible d'obtenir l'image:

erreur d'image cakephp tcpdf [Image] Impossible d'obtenir l'image

ERREUR TCPDF: [Image] Impossible d'obtenir l'image

11

Cela peut être dû à filesize() échec stat() le fichier image distant via wrapper HTTP (puisque le wrapper ne le prend pas en charge).

Selon la documentation de la méthode TCPDF image () vous pouvez passer les données d'image directement en les ajoutant au préalable par un @ symbole. Vous pouvez donc obtenir les données d'image brutes, puis les transmettre à TCPDF comme suit:

$img = file_get_contents('http://example.com/wp-content/themes/example/map_image_leasing.php/?city=Calgary&suit_type=&min_area=&max_area=');

$pdf->Image('@' . $img, 55, 19, '', '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);

Notez que je n'ai pas testé cela (et la documentation TCPDF est rare), vous devrez peut-être expérimenter un peu pour le faire fonctionner correctement.


Modifier:

Ceci est un exemple pleinement fonctionnel (sur mon PC). Utilisez ceci pour tester si vous pouvez récupérer avec succès l'image et sortir le PDF vers votre navigateur. Bien sûr, vous devrez définir un chemin valide connu pour l'image!

<?php

require './tcpdf/tcpdf.php';

$pdf = new TCPDF();

$pdf->AddPage();

$img = file_get_contents('http://path/to/your.jpg');
$pdf->Image('@' . $img);

$pdf->Output();

?>
13
timclutton

Confirmez que le serveur est capable d'utiliser PHP file_get_contents ou cURL pour télécharger le fichier. "Impossible d'obtenir la taille de l'image" est la première erreur dans la fonction Image que TCPDF lancera si le fichier n'est pas accessible à ces deux fonctions sur le serveur.

4
Sean Fahey

Pour déboguer ce problème, vous pouvez supprimer le @ de @getimagesize ($ file) dans tcpdf.php autour de la ligne 6850. Rechercher [Image] Impossible d'obtenir la taille de l'image: et faites défiler certaines lignes vers le haut. Le @ masque le message d'erreur réel.

Si vous pouvez accéder à l'URL de l'image à partir du navigateur, il se peut que votre système ne pointe pas l'URL vers l'hôte demandé. Le message associé est getimagesize (): php_network_getaddresses: échec de getaddrinfo:. Cela signifie que votre configuration php locale n'a aucune idée où rechercher l'url. Dans ce cas, vous devez modifier votre fichier/etc/hosts et pointer la configuration locale vers l'adresse IP URL. Il s'agit souvent d'un problème sur les configurations de l'hôte local.

Par exemple. 127.0.0.1 yoururlhere.local

3
Mathias Methner

J'ai eu cette erreur sur ma boutique Magento.

Si vous ouvrez tcpdf.php vous trouverez ce code, $ file était une URL quand il devrait être jut le chemin du fichier:

// check if is a local file
if (!@file_exists($file)) {
        // try to encode spaces on filename
        $tfile = str_replace(' ', '%20', $file);

Pour une solution rapide, j'ai ajouté ce code:

$file = str_replace("http://theurliwantgone/","",$tfile);

et ça a marché! J'espère que cela aide la plupart d'entre vous!

2
Elvin Ragip

Assurez-vous d'utiliser un chemin relatif, parfois le chemin ne fonctionne absolument pas

ok: "../../myImage.png"

faux: " http://www.example.com/myImage.png "

2
Justo Salcedo

Curieusement pour moi (en 2019) j'ai trouvé que je devais retirer le! de la ligne 1924 dans include/tcpdf_static.php. Pour une raison quelconque, il ne regarderait ini_get('allow_url_fopen') que s'il était faux mais mon paramètre de serveur était vrai - donc modifié le code et cela a bien fonctionné. Cela fonctionnait également auparavant, mais s'est soudainement arrêté!

0
Ukuser32