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
erreur d'image cakephp tcpdf [Image] Impossible d'obtenir l'image
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();
?>
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.
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
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!
Assurez-vous d'utiliser un chemin relatif, parfois le chemin ne fonctionne absolument pas
ok: "../../myImage.png"
faux: " http://www.example.com/myImage.png "
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é!