Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] TCPDF : K_PATH_URL définie et non définie ! Bizarre !

Posted by titof90 on 06/18/2011 20:16

Bonjour,

Lors de la génération d'un PDF avec TCPDF, (transformation d'un template html en PDF), j'obtiens l'erreur suivante :

[[exception 0]] Missing or incorrect image file: 
..D:\workspace\site_dev\lib/tcpdf/..
D:\workspace\site_dev\lib/tcpdf/avatarsD:\workspace\site_dev\lib/tcpdf/4db93e484218b0.03772447_size3.jpg 
D:\workspace\site_dev\lib\jelix\utils\jTcpdf.class.php 	50

L'image est récupérée via le chemin suivant dans le tpl : src="../../avatars/{$avatar->avatar_id}_size3.jpg"

Bizarrement, on constate qu'il remplace les '/' parce ceci 'D:\workspace\site_dev\lib/tcpdf/' mais pourquoi ?

Je fais également dans mon controller un include jClasses::inc("annonces~PDFServiceProfil"); dans la fonction qui génère le pdf afin d'importer ma classe qui surcharge jTcpdf.

Après une longue investigation, en faisant un define ('K_PATH_URL', $k_path_url); dans la classe PDFServiceProfil, le problème disparait, l'image est bien récupérée avec le bon chemin.

Cependant, quand je regarde mes logs jelix, j'obtiens les notices suivantes :

[[8]] Undefined variable: k_path_url	D:\workspace\site_dev\modules\annonces\classes\PDFServiceProfil.class.php	10
[[8]] Constant K_PATH_URL already defined	D:\workspace\site_dev\lib\jelix\utils\jTcpdf.class.php	15

Et j'avoue que je sèche complètement sur comment faire disparaitre ces notices contradictoires. Merci pour votre aide.

Christophe

  [Opened] TCPDF : K_PATH_URL définie et non définie ! Bizarre !

Reply #1 Posted by laurentj on 06/19/2011 09:28

bonjour,

Bizarrement, on constate qu'il remplace les '/' parce ceci 'D:\workspace\site_dev\lib/tcpdf/' mais pourquoi ?

Il ne remplace rien du tout, c'est juste que jelix ne travaille uniquement qu'avec des /, et que php lui fourni dans certain cas des chemins (FILE par exemple) avec un séparateur différents, comme "\" sous windows. Cela n'a aucune incidence.

en faisant un define ('K_PATH_URL', $k_path_url);

Comme le montre l'erreur suivante, K_PATH_URL est déjà définie par jTcpdf, ne pas la redéfinir. Elle est définie avec la valeur de basePath.

L'image est récupérée via le chemin suivant dans le tpl

quel template ?? Celui d'une autre page ? Ce n'est pas parce qu'une image à une url précise à une page, qu'elle aura la même pour ton pdf. D'ailleurs, il me semble que tu dois indiquer non pas un chemin d'url, mais un chemin physique de fichier. Ce qui est tout à fait différent.

  [Opened] TCPDF : K_PATH_URL définie et non définie ! Bizarre !

Reply #2 Posted by titof90 on 06/19/2011 16:48

Bonjour,

Merci pour cette réponse. Effectivement pour K_Path_url, je sais qu'il ne s'agit pas de la bonne solution et qu'il ne faut pas que je le redéfinisse dans la classe. Néanmoins, si je ne le fais je n'ai rien qui fonctionne (pas de génération de fichier pdf) parce qu'il ne trouve pas mes images.

J'ai bien essayé de faire ceci :

 <img alt="" width="80" height="80" src="{$j_basepath}../../avatars/{$avatar->avatar_id}_size3.jpg" />

J'ai d'ailleurs toujours fonctionné comme cela pour inclure mes images alors je ne comprends pas pourquoi cette fois, ça ne marche pas.

quel template ?? Celui d'une autre page ?

Je dispose d'un template pdf_profil dans lequel je mets tout mon code, et c'est ensuite mon controller qui se charge via la fonction render_pdf() de transformer le tpl en pdf.

Bref, je ne vois toujours po comment corriger ce problème :-(

  [Opened] TCPDF : K_PATH_URL définie et non définie ! Bizarre !

Reply #3 Posted by laurentj on 06/19/2011 22:13

Encore une fois, l'url que tu mets dans ton template ne dois pas être relative à une page, mais au basepath, puisque c'est configuré ainsi dans le K_PATH_URL.

Ensuite, je ne connais pas cette fonction render_pdf dont tu parles, elle vient d'où ? elle fait quoi ? J'ai l'impression que tu décris la moitié du contexte de ton problème. c'est quoi par exemple ton $k_path_url ? il vient d'où, il vaut quoi ? Et le basePath, il vaut quoi ?

Si tu reprenais depuis le début, en expliquant tout ce que tu utilises, comment tu l'utilises, ce que tu fais, ce serait pas mal ;)

  [Opened] TCPDF : K_PATH_URL définie et non définie ! Bizarre !

Reply #4 Posted by titof90 on 06/19/2011 22:56

Ensuite, je ne connais pas cette fonction render_pdf dont tu parles, elle vient d'où ? elle fait quoi ? J'ai l'impression que tu décris la moitié du contexte de ton problème.

render_pdf() est une fonction perso qui est dans mon controller. Cette fonction permet de transformer le tpl pdf_profil en fichier pdf.

c'est quoi par exemple ton $k_path_url ? il vient d'où, il vaut quoi ? Et le basePath, il vaut quoi ?

mon $k_path_url vaut la valeur qui lui est assigné par jelix par défaut dans jTcpdf ($GLOBALS'gJConfig'->urlengine'basePath') Il vient de jTcpdf mais bizarrement comme expliqué ça ne marche pas sauf si dans ma classe pdfprofil (inclus dans mon controller qui appel ma fonction render_pdf() ) je le redéfinis (raison pour laquelle j'ai ces notices)

define ('K_PATH_URL', $k_path_url);

Mon basePath me ramène à mon repertoire www

  [Opened] TCPDF : K_PATH_URL définie et non définie ! Bizarre !

Reply #5 Posted by scrasch on 06/20/2011 12:28

Bonjour,

Je vais reprendre le problème en prenant en compte nos dernières investigations : En fait, nous voulons générer un PDF à partir d'un fichier HTML avec TCPDF. Tout se passe bien (génération d'un HTML à partir du template) mais lorsque nous utilisons $rep->tcpdf->writeHTML($html, true, false, true, false, ''); Jelix (ou TCPDF) lève une erreur (avec le nom du site remplacé par '-').

[[exception 0]] Missing or incorrect image file: I:I:\workspace\-\site_dev\lib/tcpdf/workspaceI:\workspace\-\site_dev\lib/tcpdf/-I:\workspace\-\site_dev\lib/tcpdf/site_devI:\workspace\-\site_dev\lib/tcpdf/-I:\workspace\-\site_dev\lib/tcpdf/wwwI:\workspace\-\site_dev\lib/tcpdf/..I:\workspace\-\site_dev\lib/tcpdf/..I:\workspace\-\site_dev\lib/tcpdf/avatarsI:\workspace\-\site_dev\lib/tcpdf/4db9619472a456.21494557_size3.jpg I:\workspace\-\site_dev\lib\jelix\utils\jTcpdf.class.php 50 

Alors que le fichier HTML était correct, writeHTML à transformé les '/' par 'I:\workspace\-\site_dev\lib/tcpdf/' dans les adresses des images (I:RemplacementworkspaceRemplacement-Remplacementsite_devRemplacement-RemplacementwwwRemplacement..Remplacement..RemplacementavatarRemplacement4db9619472a456.21494557_size3.jpg). Dans notre cas, nous avions :

<img alt="" width="80" height="80" src="{$j_basepath}../../avatars/{$avatar->avatar_id}_size3.jpg" />

Et le comble, c'est que si on ajoute dans le code define ('K_PATH_URL', $k_path_url); ou define ('K_PATH_URL', ''); (La première solution est celle évoquée précédemment et qui génère la notice Undefined variable mais en fait, il suffit juste d'effacer le contenu de la constante 'K_PATH_URL') ça marche. Néammoins, nous avons toujours l'erreur :

[[8]] Constant K_PATH_URL already defined	D:\workspace\site_dev\lib\jelix\utils\jTcpdf.class.php	15

Peut être sauriez-vous quel est la cause de notre erreur? Par la même occasion, pourrais-je savoir quel a été votre motivation pour créer Jelix? Superbe boulot :)

Cordialement, Thomas

  [Opened] TCPDF : K_PATH_URL définie et non définie ! Bizarre !

Reply #6 Posted by laurentj on 06/20/2011 13:18

mon $k_path_url vaut la valeur qui lui est assigné par jelix par défaut dans jTcpdf

Jelix n'assigne pas une telle variable. Il n'y a aucune variable $k_path_url dans les sources de jelix. C'est TCPDF qui génère cette variable dans sa config.

Alors que le fichier HTML était correct, writeHTML à transformé les '/' par 'I:\workspace\-\site_dev\lib/tcpdf/' dans les adresses des images

C'est normal, TCPDF fait un

$tag[['attribute']][['src']] = str_replace(K_PATH_URL, K_PATH_MAIN, $tag[['attribute']][['src']]);

Ce qui est complètement bête d'un coté, car ce qu'ils veulent faire, c'est remplacer le debut de l'url par le chemin en dur, donc il faut remplacer que la première occurence. Mais avec le str_replace, ils remplacent TOUTES les occurences. c'est con.

Apparemment K_PATH_URL doit indiquer une url complète, nom de domaine compris. Ce que ne fait pas Jelix. Je vais corriger ça.

Néammoins, nous avons toujours l'erreur :

Oui c'est normal, jTcpdf déclare déjà une telle constante.

  [Opened] TCPDF : K_PATH_URL définie et non définie ! Bizarre !

Reply #7 Posted by scrasch on 06/20/2011 17:50

Ben nous avons trouvé une astuce pour la notice finalement :) Nous avons mis au début de la fonction (dans le controlleur) :

$GLOBALS[['gJConfig']]->urlengine[['basePath']] = '';

et à la fin :

$GLOBALS[['gJConfig']]->urlengine[['basePath']] = '/';

Ça marche ...

  [Opened] TCPDF : K_PATH_URL définie et non définie ! Bizarre !

Reply #8 Posted by laurentj on 06/21/2011 11:02

Nous avons mis au début de la fonction

Donc, si la conf serveur change (ne serait-ce que sur le poste de dev), tout est cassé. pas bonne idée. vraiment pas.

Récupère plutôt une nightly de la branche 1.2, c'est corrigé.

 
Page
  1. TCPDF : K_PATH_URL définie et non définie ! Bizarre !