Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-06-2008 15:16:57

NoBoDy
Nouveau membre
Date d'inscription: 20-03-2007
Messages: 3

Retour à la ligne Zend_Pdf

Bonjour à tous,

je travail depuis peu avec le framework Zend.

Je dois générer dynamiquement des pdf avec Zend_Pdf.

Je rencontre un problème lorsque je veux définir des retour à la ligne dans mon texte.

Est ce que quelqun aurait une solution à me proposer ?

Merci d'avance et bonne fin de week end.

Hors ligne

 

#2 02-06-2008 11:26:15

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Retour à la ligne Zend_Pdf

Quel est le probleme exactement?

Tu fait des <br /> pour les retours à la ligne? ou des \n ? (si tu fait des <br />, essaye de les remplacer par des \n )

Hors ligne

 

#3 04-06-2008 11:33:59

NoBoDy
Nouveau membre
Date d'inscription: 20-03-2007
Messages: 3

Re: Retour à la ligne Zend_Pdf

quand je fais ceci, la balise ou le \n est affiché sur le pdf comme du texte normal

Hors ligne

 

#4 04-06-2008 11:42:08

stf
Membre
Date d'inscription: 03-04-2008
Messages: 156

Re: Retour à la ligne Zend_Pdf

Ah ba apres avoir fait quelques recherches ...

http://www.developpez.net/forums/archiv … 74167.html


C'est donc possible yikes ....ils n'auraient pas implémentés les sauts de lignes ?(apres il te reste la solution de stoper ton texte, et d'en refaire un autre quelques pixels en dessous) ...

Ca a peut etre changé avec le temps(le topic date un peu...), quelqu'un pour confirmer ?

Hors ligne

 

#5 04-06-2008 13:06:37

whitespirit
Membre
Date d'inscription: 25-01-2008
Messages: 393

Re: Retour à la ligne Zend_Pdf

rien à voir mais n'oubliez pas qu'il existe des librairies super simple à utiliser pour transformer du html en pdf, donc si vous voulez faire des factures je vous conseille vivement de les utiliser (html2pdf, html2fpdf, tcpdf, etc.).

Hors ligne

 

#6 04-06-2008 15:51:33

ledahu
Membre
Date d'inscription: 13-03-2008
Messages: 69

Re: Retour à la ligne Zend_Pdf

La seule solution que j'ai trouvé c'est de découper le texte avec le nombre de caractère maxi par ligne en tenant compte des coupures de mots et de sauter une ligne dans le pdf. Je te mets un bout de code qui m'a permet de convertir des spools en pdf. Tu peux calculer le saut de ligne en fonction de la taille de ta police. Voir wikipedia la méthode de calcul.

Code:

        foreach ($mesPages as $Page) { // Pour chaque page
            $pdf->pages[] = ($page = $pdf->newPage($format["format"]));
            $page->setStyle($style);
            $y=$format["hauteur"]-$format["marge_t"];
            foreach ($Page as $Ligne) { // Pour chaque ligne
                if(strpos($Ligne,chr(0x0d))) { // Je regarde s'il y a une superposition
                    $maLigne=explode(chr(0x0d),$Ligne); // Si oui je mets dans un array
                    foreach ($maLigne as $superpos) { // Pour chaque ligne superposée
                        $page->drawText($superpos, $format["marge_l"], $y);
                    }
                } else {
                        $page->drawText($Ligne, $format["marge_l"], $y);
                }
                $y-=$format["ligne"];
            }
        $i++;
        if ($i==$nbrpage) break;
        }

Hors ligne

 

#7 11-06-2008 17:34:54

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: Retour à la ligne Zend_Pdf

Alors un truc. Je ne sais pas du tout comment est montée ta vue, mais en PHP "simple" et avec fpdf, si ton \n est entre quotes '... \n ...', il n'est pas interprété, mais s'il est entre doubles-quotes "... \n ...", là il est interprété.

Avec ZF je doute que ce soit le problème, mais essaye, on ne sait jamais.


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#8 11-06-2008 22:54:45

ledahu
Membre
Date d'inscription: 13-03-2008
Messages: 69

Re: Retour à la ligne Zend_Pdf

J'ai trouvé une réponse encore plus complète que la mienne ici http://blog.alfbox.net/index.php/2008/0 … -zend-pdf/

mais globalement il fait ce que je t'ai dit c'est à dire calculer la taille des lettres et donc le nombre de caractères maxi par ligne et il saute une ligne.

Code:

protected function getWrappedText($string, Zend_Pdf_Style $style,$max_width)
{
    $wrappedText = '' ;
    $lines = explode("\n",$string) ;
    foreach($lines as $line) {
         $words = explode(' ',$line) ;
         $word_count = count($words) ;
         $i = 0 ;
         $wrappedLine = '' ;
         while($i < $word_count)
         {
             /* if adding a new word isn't wider than $max_width,
             we add the word */
             if($this->widthForStringUsingFontSize($wrappedLine.' '.$words[$i]
                 ,$style->getFont()
                 , $style->getFontSize()) < $max_width) {
                 if(!empty($wrappedLine)) {
                     $wrappedLine .= ' ' ;
                 }
                 $wrappedLine .= $words[$i] ;
             } else {
                 $wrappedText .= $wrappedLine."\n" ;
                 $wrappedLine = $words[$i] ;
             }
             $i++ ;
         }
         $wrappedText .= $wrappedLine."\n" ;
     }
     return $wrappedText ;
}

/**
 * found here, not sure of the author :
 * http://devzone.zend.com/article/2525-Zend_Pdf-tutorial#comments-2535
 */
 protected function widthForStringUsingFontSize($string, $font, $fontSize)
 {
     $drawingString = iconv('UTF-8', 'UTF-16BE//IGNORE', $string);
     $characters = array();
     for ($i = 0; $i < strlen($drawingString); $i++) {
         $characters[] = (ord($drawingString[$i++]) << 8 ) | ord($drawingString[$i]);
     }
     $glyphs = $font->glyphNumbersForCharacters($characters);
     $widths = $font->widthsForGlyphs($glyphs);
     $stringWidth = (array_sum($widths) / $font->getUnitsPerEm()) * $fontSize;
     return $stringWidth;
 }

then you can draw the text easily :

$y = 700;
$lines = explode("\n",$this->getWrappedText($text,$style_text,400)) ;
foreach($lines as $line)
{
    $page2->drawText($line, 140, $y);
    $y-=15;
}

Voila.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages