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 des entrées de l'utilisateur et je veux ajouter cette image dans 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 cela crée l'image comme je voulais , mais si mis cette url, il ne fonctionne pas . Il dit Impossible d'obtenir la taille de la image

Mais si je mets quelque chose comme ceci

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

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

Comment puis-je le résoudre ?

j'ai visité le lien stacoverflow suivant , mais rien de tout cela n'est venu à l'aide

tcpdf travaillant sur localhost mais pas sur mon sever donnant l'erreur TCPDF erreur: [Image] impossible D'obtenir l'image:

cakephp tcpdf erreur d'image [Image] impossible d'obtenir image

TCPDF erreur: [Image] impossible d'obtenir l'image

10
demandé sur Community 2014-11-21 15:01:09

6 réponses

Cela peut être dû à filesize() défaut stat() le fichier d'image distant via le HTTP wrapper (puisque l'emballage ne le supporte pas).

Selon TCPDF image() documentation de la méthode vous pouvez transmettre les données d'image directement en les préfixant avec un @ symbole. Vous pouvez donc obtenir les données brutes de l'image et 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é (et la documentation de TCPDF est clairsemée) donc vous pourriez avoir besoin d'expérimenter un peu pour le faire fonctionner correctement.


Edit:

ceci est un exemple entièrement fonctionnel (sur mon PC). Utilisez ceci pour tester si vous pouvez récupérer avec succès l'image et la sortie du PDF à votre navigateur. Bien sûr, vous aurez besoin de 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();

?>
12
répondu timclutton 2014-11-21 14:38:11

confirmer que le serveur est capable D'utiliser les 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 le Image fonction que TCPDF lancera si le fichier n'est pas responsable de ces deux fonctions sur le serveur.

4
répondu Sean Fahey 2015-01-18 04:20:34

déboguer ce problème, vous pouvez supprimer le @ de @getimagesize($fichier) dans tcpdf.php autour de la ligne 6850. Recherche pour [Image] Impossible d'obtenir la taille de l'image: et faites défiler quelques lignes. Le @ cache le message d'erreur réel.

si vous pouvez atteindre l'url de l'image à partir du navigateur, il est possible que votre système ne pointe pas l'url vers l'hôte demandé. Le message correspondant est getimagesize (): php_network_getaddresses: getaddrinfo failed:. Que signifie que votre configuration php locale n'a aucune idée d'où chercher l'url. Dans ce cas, vous devez modifier votre fichier /etc/hosts et pointer la configuration locale sur l'adresse IP des urls. Ceci est souvent un problème sur les configurations localhost.

E. g. 127.0.0.1 yoururlhere.local

3
répondu Mathias Methner 2016-12-03 14:59:32

j'ai eu cette erreur dans Mon Magasin de Magento.

Si vous ouvrez tcpdf.php vous trouverez ce code, $file était une url quand il devrait être juste le chemin vers le 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é! Espérons que cela aide la plupart d'entre vous!

2
répondu Elvin Ragip 2017-11-16 13:45:50

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

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

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

1
répondu Justo Salcedo 2016-01-28 08:13:17

recherche autour de la ligne 6877 dans tcpdf.php

if ($imsize === FALSE) {
        if (($w > 0) AND ($h > 0)) {
            // get measures from specified data
            $pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
            $ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
            $imsize = array($pw, $ph);
        } else {
            $this->Error('[Image] Unable to get the size of the image: '.$file);
        }
    }

remplacer par:

if ($imsize === TRUE) {
        if (($w > 0) AND ($h > 0)) {
            // get measures from specified data
            $pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
            $ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k;
            $imsize = array($pw, $ph);
        } else {
            $this->Error('[Image] Unable to get the size of the image: '.$file);
        }
    }
-2
répondu Hennie van Rooyen 2018-01-05 00:23:21