developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 12 years ago

Closed 12 years ago

#693 closed bug (fixed)

Probleme Font JTCPDF

Reported by: yannl Owned by: Julien
Priority: normal Milestone: Jelix 1.0.6
Component: jelix:core response Version: 1.0.5
Severity: normal Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version: 5.2.5

Description

L'utilsation de TCPDF engendre l'erreur suivante :

 [error 0] Undefined font:  B \www\projet\lib\jelix\utils\jTcpdf.class.php 	40

Cette erreur se produit même si les fonts sont présentes dans lib/pdf-fonts/

Le bug a été identifié a l'aide de cette action, bien sûr j'ai tester plusieurs valeurs pour les paramètres de la méthode SetFont? de TCPDF.

function printPDF(){
       $rep = $this->getResponse('tcpdf');
       $rep->outputFileName = 'test.pdf';
       $rep->doDownload = true;
       //initialisation de l'objet pdf
       $rep->initPdf();
       $rep->tcpdf->AddPage();
       $rep->tcpdf->SetFont('Helvetica');
       $rep->tcpdf->SetTitle('Titre');
       $rep->tcpdf->Text(10,10,'un texte');  
       return $rep;
   }

Attachments (1)

693-jTcpdf-header-and-footer-default-fonts.diff (1.9 KB) - added by Julien 12 years ago.

Download all attachments as: .zip

Change History (8)

comment:1 Changed 12 years ago by laurentj

  • Component changed from jelix:utils to jelix:core response
  • Milestone set to Jelix 1.0.6
  • Owner set to laurentj

comment:2 in reply to: ↑ description Changed 12 years ago by yamsuz

Bonjour,

Je suis un nouvel utilisateur, j'ai peut-être trouvé l'erreur

En cherchant ce qui se passe j'ai trouvé une solution mais je suppose quelle va pas convenir, mais ça donnera peut-etre une piste à d'autres personnes

Dans le fichier tcpdf.php, j'ai remarqué qu'il y avait 2 instructions dans la fonction Header :

$this->SetFont($this->header_font[0], 'B', $this->header_font[2] + 1);
$this->SetFont($this->header_font[0], $this->header_font[1], $this->header_font[2]);

Le problème provient visiblement de la fonction SetFont? qui ne se termine pas et qui génére une erreur. J'ai donc remonté sur le code pour trouvé l'erreur le contenu de $this->header_font[0] est 'h' alors que je crois avoir compris que ça devrait être helvetica.

J'ai donc mis pour la première instruction l'instruction suivante : $this->SetFont?($this->header_font, 'B', $this->header_font[2] + 1); en enlevant '[0]' du premier paramère

Au niveau de la deuxième instruction j'ai mis la même instruction que la première pour voir si ça fonctionne.

Le pdf se génére bien, la taille du texte est encore très petit, mais au moins ça fonctionne

Replying to yannl:

L'utilsation de TCPDF engendre l'erreur suivante :

 [error 0] Undefined font:  B \www\projet\lib\jelix\utils\jTcpdf.class.php 	40

Cette erreur se produit même si les fonts sont présentes dans lib/pdf-fonts/

Le bug a été identifié a l'aide de cette action, bien sûr j'ai tester plusieurs valeurs pour les paramètres de la méthode SetFont? de TCPDF.

function printPDF(){
       $rep = $this->getResponse('tcpdf');
       $rep->outputFileName = 'test.pdf';
       $rep->doDownload = true;
       //initialisation de l'objet pdf
       $rep->initPdf();
       $rep->tcpdf->AddPage();
       $rep->tcpdf->SetFont('Helvetica');
       $rep->tcpdf->SetTitle('Titre');
       $rep->tcpdf->Text(10,10,'un texte');  
       return $rep;
   }

comment:3 Changed 12 years ago by Julien

  • Owner changed from laurentj to Julien
  • Status changed from new to assigned

merci pour la piste, je vais voir exactement pourquoi ça ne marche plus.

comment:4 Changed 12 years ago by Julien

en fait, l'usage de TCPDF conseillé, c'est de créer une classe héritant de TCPDF, et de redéfinir notamment les méthodes Header(), Footer(), etc... en fonction du document à générer.

du coup, on ne fait pas forcement appel aux méthodes Header existantes, qui posent problème, car en fait, jTcpdf ne défini pas de police par défaut pour le header.

il faudrait donc faire quelque chose du genre :

function printPDF(){
    $rep = $this->getResponse('tcpdf');
    $rep->outputFileName = 'test.pdf';
    $rep->doDownload = true;
    //initialisation de l'objet pdf
    $rep->initPdf();
    $rep->tcpdf->AddPage();
    $rep->tcpdf->setHeaderFont(array('vera','B',12));
    $rep->tcpdf->SetFont('Helvetica');
    $rep->tcpdf->SetTitle('Titre');
    $rep->tcpdf->Text(10,10,'un texte');  
    return $rep;
}

maintenant, le meilleur usage de TCPDF est plutôt comme celà :

une classe métier :

class myPDF extends jTcpdf{
    public function Header(){
        // code to write the header
    }

    public function Footer(){
        // code to write the footer
    }

    // other overloaded methods

    public function buildTable($cols,$rows){
        // build a table of products
    }
}

et la méthode du controlleur :

public function printPDF(){
    $response = $this->getResponse('tcpdf');
    $pdf = jClasses::createInstance('myPDF');
    $products = array();
    foreach(jDao::get('products')->findAll() as $product)
        $products[] = array($product->name,$product->price);
    $pdf->buildTable(array('name','price'),$products);
    $response->tcpdf = $pdf;
    return $response;
}

Bref, je vais fixer jTcpdf afin d'avoir une police par défaut là où il faut, mais c'est vrai que j'ai toujours utilisé cette classe en la surchargeant, donc le bug (ou plutôt la nécessité de définir une police par défaut pour le header et footer) était passé à la trappe

comment:5 Changed 12 years ago by Julien

  • review set to review?

comment:6 Changed 12 years ago by laurentj

  • review changed from review? to review+

Pas de souci de faire comme ça si ça corrige vraiment le problème initial. merci Julien :-)

comment:7 Changed 12 years ago by Julien

  • Resolution set to fixed
  • Status changed from assigned to closed

yup, pour le trunk, je verrai de toute façon ce qu'il convient de faire via le ticket #403.

en attendant, ça fixe effectivement le problème dans 1.0.x et trunk

commit done ;)

Note: See TracTickets for help on using tickets.