Accueil > Forum > > > > image avec FPDF
image avec FPDF
lundi 19 octobre 2009 à 20:08:24 |
image avec FPDF

sebalex
|
Bonsoir à toutes et à tous,
Voici un bout de mon code. Avec ce code (FPDF), je crée un document PDF. A présent, je souhaite qu'en fonction de la base, il s'affiche tel ou tel logo.
$this->Image('../logos/a_a.jpg',95,15,20);
Lorsque j'écris :
class PDF extends FPDF
{
//En-tête
function Header()
{
//Logo
$this->Image('../logos/a_a.jpg',95,15,20);
ça fonctionne mais :
class PDF extends FPDF
{
//En-tête
function Header()
{
//Logo
$this->Image('../logos/'<?PHP echo $row_logo['logo'];?>.jpg',95,15,20);
j'ai un message d'erreur disant que le fichier n'est pas un document reconnu alors que le fichier $row_logo... est le même) !!!
Je n'y comprends plus rien.
Quelqu'un pourrait m'aider ?
Merci mille fois et bonne soirée à tous.
David
|
|
lundi 19 octobre 2009 à 21:50:23 |
Re : image avec FPDF

neigedhiver
|
Salut,
Mais pourquoi ouvrir une balise PHP dans du code PHP ? Ca n'a pas de sens, donc PHP n'aime pas (et il a bien raison ^^)
Au lieu de :
Code PHP : $this->Image('../logos/'<?PHP echo $row_logo['logo'];?>.jpg',95,15,20);
écrire :
Code PHP : $this->Image('../logos/'.$row_logo['logo'].'.jpg',95,15,20);
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
lundi 19 octobre 2009 à 22:50:50 |
Re : image avec FPDF

sebalex
|
Il s'agit bien sur d'une erreur de ma part. J'entendais bien sans les balises. Mais même comme ça ça ne fonctionne pas
David
|
|
lundi 19 octobre 2009 à 22:59:04 |
Re : image avec FPDF

neigedhiver
|
Que contient la variable $row_logo['logo'] ?
Pour deboguer :
Code PHP : var_dump($row_logo['logo']);
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
lundi 19 octobre 2009 à 23:06:53 |
Re : image avec FPDF

sebalex
|
Elle contient le nom du fichier "logo". Dans mon exemple, au lieu de mettre la variable sous forme de $row_logo.... j'écris directement le nom du fichier et cela fonctionne par contre quand je fais appel à la variable et j'écris $row_logo... ça ne fonctionne plus. J'essayerai avec var_dump.
Merci de ta précieuse aide et bonne soirée.
David
|
|
lundi 19 octobre 2009 à 23:16:28 |
Re : image avec FPDF

neigedhiver
|
Je me doutais bien de la nature de ce que cette variable contient ;)
L'idée est de vérifier qu'elle contient effectivement ce qu'elle est censée contenir.
Un petit indice : si le code de ton script est tel que tu le présentes, c'est à dire si la variable $row_logo est définie en dehors de la méthode Header(), alors il est normal que ça ne fonctionne pas, puisqu'il y a un problème de portée de variable... Celle-ci n'est pas accessible depuis une fonction si elle n'est pas explicitement importée (global $row_logo; par exemple) ou passée en paramètre à la méthode Header();
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
lundi 19 octobre 2009 à 23:24:34 |
Re : image avec FPDF

sebalex
|
Merci mille fois de ces efforts.
Jusqu'à présent, j'utilise un code php relativement simple (pour moi) mais là tu me parles presque "chinois" :). Aurais-tu un chti exemple à me communiquer soit pour le "global..." soit pour passer en paramètre à la méthode Header ();
Ce serait cool.
Bien à toi
David
|
|
mardi 20 octobre 2009 à 01:01:04 |
Re : image avec FPDF

neigedhiver
|
Comme j'aime bien la doc de PHP, voici un peu de lecture : Portée des variables
Une variable définie dans le script "principal" (celui qui est directement appelé) ne sera pas accessible dans une fonction (ou une méthode d'un objet) sans être importée explicitement.
Pour la rendre accessible, tu peux :
Code PHP : function Header() {
global $row_logo;
//Logo
$this->Image('../logos/'<?PHP echo $row_logo['logo'];?>.jpg',95,15,20);
La ligne global $row_logo; rend la variable $row_logo accessible dans cette méthode. Tu peux donc la manipuler normalement.
Ceci n'est pas la manière la plus recommandée, bien que ça ne présente pas spécialement un risque de sécurité (il ne faut pas le faire de manière systématique avec les variables qui proviennent de saisie utilisateur, comme $_GET pour les arguments dans l'url, $_POST pour les données des formulaires ou $_COOKIE pour les données stockées dans les cookies sur le navigateur client).
Tu peux aussi accéder à cette variable en utilisant l'index du même nom sur le tableau $GLOBALS :
Code PHP : function Header() {
//Logo
$this->Image('../logos/'<?PHP echo $GLOBALS['row_logo']['logo'];?>.jpg',95,15,20);
Mais cela ne fonctionne que si la variable est définie dans le "script principal", donc pas si elle est définie dans une autre fonction (il me semble...)
L'autre solution, parmi les plus "propres" (du fait qu'on contrôle mieux les données et d'où elles sont accessibles, donc par qui/quoi elles peuvent être manipulées) consiste à passer une variable en argument d'une fonction (ou méthode d'objet). Cela se fait simplement :
ma_fonction($ma_variable);
Ainsi, la variable $ma_variable sera accessible dans la fonction ma_fonction().
Dans ton cas, il s'agit d'une classe qui étend FPDF. Je vois dans la doc de FPDF que :
Cette méthode permet de définir l'en-tête de page. Elle est appelée automatiquement par AddPage() et ne devrait donc pas être appelée explicitement par l'application.
Par conséquent, tu n'as pas de contrôle sur la méthode AddPage (à moins que tu ne la surcharges, c'est à toi de voir dans quelle mesure c'est possible, utile, pertinent, etc). Donc cette solution ne semble pas indiquée.
Donc questions :
- où est-ce que tu définies cette variable $row_logo ?
- que contient-elle effectivement à cet endroit du code ? Cf mon précédent message où je t'indiquais d'utiliser var_dump() pour le savoir (fonction qui renseigne sur le type et le contenu de la variable)
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
mardi 20 octobre 2009 à 09:31:54 |
Re : image avec FPDF

sebalex
|
Merci encore et pour être vraiment précis, voici la structure :
J'ai une base de données (MySql) avec un champ "logo", un champ "nom" et un champ "adresse".
Dans mon script initial, j'écris :
mysql_select_db($database_connexion, $connexion);
$query_club = "SELECT * FROM clubs WHERE id_club = '$row_licences[id_club]'";
$club = mysql_query($query_ club, $connexion) or die(mysql_error());
$row_ club = mysql_fetch_assoc($club);
Ensuite je détermine les variables :
$nom = $row_club['nom_club'];
$adresse = $row_club['adresse_club'];
$logo = $row_club['logo']; // Dans mon exemple, la donnée s'appelle "a_a.jpg" (ce fichier se trouve dans l'arborescence du site)
Ensuite j'écris mon script d'entête :
class PDF extends FPDF
{
//En-tête
function Header()
{
global $nom; $logo; $adresse;
//Logo
$this->Image('../logos/a_a.jpg',95,15,20);
$this->SetFont('Arial','B',9);
//Titre
$this->Cell(0,18,'',0,2,'C');
$this->SetTextColor(100);
$this->Cell(0,10,''.$nom.'',0,2,'C');
$this->SetFont('Arial','',5);
$this->SetTextColor(0);
$this->Cell(0,2.5,''.$adresse.'',0,2,'C');
//Saut de ligne
$this->Ln(17);
//Décalage à droite
$this->Cell(110);
}
Pour les variables $nom et $adresse, lors de la création du PDF, le script reprend les données de la BDD (donc ok) mais pour le logo, j'ai un message disant que le fichier image n'est pas supporté. J'aimerais savoir comment écrire le code à la place du nom du fichier (en rouge).
J'apprécie très sincèrement ton aide et te remercie de tes efforts. C'est grâce à des personnes comme toi que l'on progresse.
Bien à toi
David
|
|
mardi 20 octobre 2009 à 09:53:59 |
Re : image avec FPDF

neigedhiver
|
Réponse acceptée !
Ok.
Alors concernant la syntaxe de global, il faut séparer les variables que l'on souhaite rendre accessibles par des virgules, pas par des points-virgules. le point-virgule indique la fin d'une instruction, commande, fonction, bref, qu'il faut passer à autre chose.
Code PHP : global $nom, $logo, $adresse;
Du coup, pour rendre dynamique dans ta classe le logo :
Code PHP : $this->Image('../logos/'.$logo,95,15,20);
Cependant, je crois que la manière de gérer cette variable dans ta classe n'est pas judicieuse. Je vais essayer de ne pas dire de bêtise, c'est pas évident sans voir tout le code dans son ensemble.
Au lieu d'utiliser le mot clé global, il est peut-être plus judicieux, puisque tu étends la classe FPDF, de profiter de l'occasion pour passer le chemin du logo en paramètre lors de l'instanciation de l'objet (ou juste après, peu importe).
En gros, ça donnerait un truc comme ça :
Code PHP : class PDF extends FPDF {
var $logo;
function PDF($orientation, $unit, $format) {
parent::FPDF($orientation, $unit, $format);
}
function setLogo($logo) {
// Il faut passer le chemin complet vers le logo
$this -> logo = $logo;
}
function header() {
if (file_exists($this -> logo) && !is_dir($this -> logo)) {
$this->Image($this -> logo,95,15,20);
}
// Et la suite...
}
}
Cette manière de faire est de loin plus propre et plus facile à maintenir.
La méthode setLogo() permet de définir le logo à utiliser comme image. Tel que j'ai écrit le code, il faut passer le chemin complet, mais tu peux facilement modifier le truc pour laisser le chemin en dur dans la classe (ce que je n'aime pas trop faire pour des raisons d'évolutivité et de réutilisabilité : si tu veux utiliser une image qui se trouve ailleurs, tu es coincé et obligé de modifier ton code).
J'ai rajouté une vérification comme quoi le fichier image existe bel et bien, on peut pousser plus les tests, déclencher une erreur si l'image n'existe pas, utiliser une image par défaut... Bref, t'en fais ce que tu veux, quoi, je me suis juste permis de mettre le doigt sur la nécessité de vérifier l'existance du fichier.
Telle que tu avais fait ta classe, si tu voulais générer plusieurs fichiers PDF avec un seul script, tu aurais été sacrément emmerdé. Là, pas de problème : tu instancies une fois la classe, tu lui passes les paramètres, tu génère ton PDF et tu peux recommencer en passant de nouveaux paramètres pour générer un nouveau PDF sans avoir à instancier à nouveau la classe (donc consommation moindre en terme de ressources processeur et mémoire).
J'apprécie très sincèrement ton aide et te remercie de tes efforts. C'est grâce à des personnes comme toi que l'on progresse.
Arrête ton char, Marcel, il parait que j'me la pète et que j'envoie promener les gens en leur disant de lire la doc... ^^
Si t'as d'autres questions, y'a la doc de PHP :o) Mais non, j'plaisante, hésite pas ;)
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
|
|
Cette discussion est classée dans : image, pdf, logo, logos, fpdf
Répondre à ce message
Sujets en rapport avec ce message
Transformer un PDF (FPDF) en image [ par lowkey ]
Salut !!Je souhaiterais transformer un PDF créé avec la classe FPDF en image.Ma question est : Est-ce que c'est possible?Voilou !! Merci d'avancelowke
php->pdf->probleme image [ par younes371 ]
Bonjour, J'ai trouvé un code ds phpcs qui m a été très utile pour mon application,j'ai pu afficher les resultats de la requette dans le tableau(Numero
FPDF [ par GADSN ]
bonjourvoila , il'ya presque trois semaine que je suis bloquer dans la génération d'un devis en format pdf depuis une table mysql: le doc pdf doit con
FPDF [ par spamito ]
Salut,J'utilise FPDF pour créer un fichier .pdf contenant un article, voici mon code :require('fpdf.php');$id=$_GET['id'];include('config/config.php')
Insertion d'image dans FPDF [ par FM35 ]
Bonjour,Voilà, je viens de créer un état PDF en passer par FPDF et la résulat est sympa.Il reste un problème d'affichage à l'ecran.dans une boucle, j'
FPDF [ par zoomzoomzoomzoom ]
Hello,j'utilise FPDF pour générer mes pdf à partir de texte, jpg etc... Est il possible de faire un PDF à partir de pdf ? ... Je m'explique, j'ai tout
Problémes avec Fpdf [ par Psyroy ]
Bonjour à tous, Je débute dans les scripts PHP ainsi que dans le module Fpdf, j'aurai quelque questions a posés :1)Je voudrai savoir
Problème d'utilisation class FPDF [ par anthony428 ]
Bonjour, J'utilise la classe FPDF pour générer un PDF à partir de données que j'ai recueillis dans un formulaire mais lorsque je fais un aperçu avant
enregistrer fpdf en local [ par minet5 ]
Bonjour,J ai un probleme depuis 2 jours concernant l'utilisation de la librairie fpdf.Leurs tutoriels ainsi que google n'ont pas su me répondre, c'est
librairie fpdf [ par repi2 ]
Bonjour, je souhaite automatiser la generation d'un fichier pdf qui comporte 2 pages, 1) la premiere est un pdf generé a la suite d'un traitement de v
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|