Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > PDF > FPDF
FPDF Forum d'entraide pour la bibliothèque FPDF permettant de générer des documents PDF en PHP. Avant de poster -> tutoriels FPDF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/05/2011, 11h53   #1
Invité régulier
 
Femme
Étudiant
Inscription : mai 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 22
Points : 6
Points : 6
Par défaut Afficher image blob sur PDF

Bonjour à tous,

Je suis actuellement en stage et je dois développer le nouveau site internet de cette entreprise.
J'ai créé une base de données dans laquelle j'ai stocké les produits (num, titre, image, ...). L'image est stockée au format blob.
J'ai réussi après plusieurs jours à afficher l'image contenue dans la base de données grâce au code suivant :

afficher_img_pdt.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?php
    $connexion=mysql_connect("","","");
    mysql_select_db("lcb");
    $titre=$_GET['titre'];
    $requete = "SELECT image1, type_img1 FROM produits WHERE titre='$titre'";
    $resultat = mysql_query($requete, $connexion);
    $donnees = mysql_result($resultat, article.logo);
    $type = mysql_result($resultat, 0, article.type_img);
    header('Content-type: image/"$type"');
    header('Content-transfer-encoding: binary');
    echo mysql_result($resultat, 0);
    mysql_close($connexion);
?>
Sur la page où je souhaite afficher une fiche du produit, j'affiche l'image comme ceci :

fiche_pdt.php
Code :
1
2
 
<img src="afficher_img_pdt.php?titre=<?php echo $row['titre']; ?>" />
Je vous expose maintenant mon problème
Je dois générer le pdf de ces produits avec le titre, la description et l'image !
Pour générer le pdf, j'utilise la librairie FPDF. Et là, je suis bloquée depuis plusieurs jours pour afficher cette image.
J'ai essayé plusieurs choses :
Code :
1
2
3
 
$img = "<img src='afficher_img_pdt.php?titre=".$titre."' />";
$PDF->Image($img, 35, 55, 55);
J'ai également essayé de mettre l'url en entier, mais ça ne fonctionne pas non plus.

J'espère avoir été claire pour exposer mon problème.
Je vous remercie par avance pour vos réponses
Saphir09 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 10h17   #2
Invité régulier
 
Femme
Étudiant
Inscription : mai 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 22
Points : 6
Points : 6
Bonjour,

Je vois que ça n'inspire personne...

J'ai essayé autre chose depuis l'autre jour :
Code :
1
2
 
$PDF->WriteHTML("<img src='afficher_img_pdt.php?titre=$titre' height=50 width=50>");
Mais j'obtiens l'erreur suivante :
Citation:
FPDF error: Unsupported image type: php?titre=
La fonction WriteHTML() est visible ici : http://www.fpdf.org/download/html2pdf.phps

J'aimerai bien une réponse aujourd'hui
Merci d'avance
Saphir09 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 11h26   #3
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Citation:
Envoyé par Saphir09 Voir le message
L'image est stockée au format blob.
Beurk.

Citation:
Envoyé par Saphir09 Voir le message
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
<?php
    $connexion=@mysql_connect("","","");
    @mysql_select_db("lcb");
$titre=$_GET['titre'];
    $requete = "SELECT image1, type_img1 FROM produits WHERE titre='$titre'";
    $resultat = @mysql_query($requete, $connexion);
    $donnees = @mysql_result($resultat, article.logo);
    $type = @mysql_result($resultat, 0, article.type_img);
    header('Content-type: image/"$type"');
	header('Content-transfer-encoding: binary');
	echo mysql_result($resultat, 0);
	mysql_close($connexion);
?>
ouch, les "@"... Mais bon, passons.


Citation:
Envoyé par Saphir09 Voir le message
Code :
1
2
3
 
$img = "<img src='afficher_img_pdt.php?titre=".$titre."' />";
$PDF->Image($img, 35, 55, 55);
La fonction Image() ne fonctionne pas comme ça. http://www.fpdf.org/fr/doc/image.htm

Le premier paramètre est le chemin vers l'image.
1 solution rapide à tester :
Code :
1
2
$img = "<img src='afficher_img_pdt.php?titre=".$titre."' />";
$PDF->Image("afficher_img_pdt.php?titre=".$titre, 35, 55, 55);
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 13h09   #4
Invité régulier
 
Femme
Étudiant
Inscription : mai 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 22
Points : 6
Points : 6
Merci pour ta réponse !

Pour l'image enregistrée en blob dans la base de données, je sais que ce n'est pas la meilleure solution. Mais la personne pour qui je réalise le site, voulait pouvoir gérer le plus facilement possible son site internet.

J'ai essayé la solution que tu proposes mais j'obtiens l'erreur suivante :
Citation:
FPDF error: Unsupported image type: php?titre=***
Aurais-tu d'autres idées ?
Saphir09 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 14h05   #5
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Si toutes les images ont la même extension, tu peux la forcer.
Par exemple, pour si ce sont tous des jpg :

Code :
1
2
$img = "<img src='afficher_img_pdt.php?titre=".$titre."' />";
$PDF->Image("afficher_img_pdt.php?titre=".$titre, 35, 55, 55, 'jpg');
Cela supprimera le contrôle automatique pour que le script détecte quel type d'image vous lui donnez.

Si ce n'est pas le cas, je pense qu'il n'y a que 3 autres solutions plus ou moins bonne selon le besoin :
  • Arreter d'utiliser la base pour stocker des images (perso, je ne trouve pas que ce soit une bonne solution, quelque soit le besoin).
  • Enregistrer les images depuis la base dans un fichier temporaire, le placer dans le PDF puis le supprimer.
  • Utiliser autre chose que FPDF ou le modifier (l'étendre).
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 14h30   #6
Invité régulier
 
Femme
Étudiant
Inscription : mai 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 22
Points : 6
Points : 6
Toujours la même erreur...

J'aimerai essayer la deuxième solution que tu proposes.
Mais comment dois-je m'y prendre ?

Si je ne m'en sors pas avec, je ferai la première. En fait, l'utilisateur remplit la base de données depuis un formulaire. Il ne va pas dans phpMyAdmin et n'utilise pas de logiciel tel que winscp pour mettre de nouveaux produits (images). Alors comment faire avec les images ?

Je ne sais pas si je suis très claire...
Alors posez-moi des questions s'il vous manque des infos.
Saphir09 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 14h42   #7
Invité régulier
 
Femme
Étudiant
Inscription : mai 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 22
Points : 6
Points : 6
Je suis en train de me pencher sur la première solution...

Est-il possible d'uploader une image dans un répertoire spécifique sur le serveur par un formulaire en php ?
Saphir09 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 15h56   #8
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Citation:
Envoyé par Saphir09 Voir le message
Toujours la même erreur...

J'aimerai essayer la deuxième solution que tu proposes.
Mais comment dois-je m'y prendre ?
ça fera toujours la même erreur si le fichier n'est pas un jpg, par exemple. D'ailleurs, je me suis trompé, il faut indiquer "JPG" ou "JPEG". (bref, faut aller lire le manuel de FPDF )

Pour cette solution, il faudrait passer par file_put_contents() et bien gérer les dossiers

Citation:
Envoyé par Saphir09 Voir le message
Je suis en train de me pencher sur la première solution...

Est-il possible d'uploader une image dans un répertoire spécifique sur le serveur par un formulaire en php ?
Tout à fait, il existe un tuto sur développez : http://antoine-herault.developpez.co...ls/php/upload/
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 09h54   #9
Invité régulier
 
Femme
Étudiant
Inscription : mai 2011
Messages : 22
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 22
Points : 6
Points : 6
Merci de ton aide et pour le lien.

Je ne stocke plus mes images dans la base de données au format blob. Je ne stocke plus que le chemin de l'image en ayant ulpoader celle-ci avant

Du coup, plus de blob et plus de problème pour mon PDF
Saphir09 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/05/2011, 10h40   #10
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Voilà, ça c'est le "vraie" solution

Par contre, n'hésite pas à commenter ton code pour indiquer comment tu as géré les dossiers / nom de fichiers / etc.

Car si tu y reviens dans 6 mois, tu auras oublié et c'est super galère à repérer
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2012, 18h02   #11
Membre du Club
 
Avatar de MinDBuSteR
 
Homme
Développeur informatique
Inscription : juin 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2011
Messages : 35
Points : 44
Points : 44
Peut être apporter une réponse à la question initiale qui n'a pas été résolu (certes un an après mais si d'autres tombent dessus...).

La question était comment "Afficher une image BLOB sur PDF".

affiche_image.php

Page servant à afficher l'image BLOB à partir de son id, on récupère le code binaire de l'image ainsi que son extension.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$id = intval($_GET['show']);
 
    $result = mysql_query("SELECT ext, UNIX_TIMESTAMP(image_date), donnee
                             FROM images
                            WHERE img_no=".$id." LIMIT 1");
 
    if (mysql_num_rows($result) == 0)
        die('pas d image');
 
    list($ext, $image_time, $data) = mysql_fetch_row($result);
 
    header('Content-Length: '.strlen($data));
    header("Content-type: image/{$ext}");
 
    echo $data;
    exit();
Page PDF

Via la librairie FDPF, on trouve le manuel de la fonction Image.

C'est écrie :

Code :
1
2
// Insère une image dynamique à partir d'une URL
$pdf->Image('http://chart.googleapis.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World',60,30,90,0,'PNG');
Donc il suffit de faire la même opération pour notre image BLOB en insérant l'URL absolue de notre fichier affiche_image.php.

Code :
$pdf->Image('http://localhost/affiche_image.php?show=1',60,30,90,0,'JPG');
Et voilà !
__________________
"Beatus qui prodest quibus potest "
MinDBuSteR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h01.


 
 
 
 
Partenaires

Hébergement Web